سؤال

I have the following two routes defined in my MVC app.;- At the moment I have two "MVC View content pages" defined

/ShowName/NameById
/ShowName/Index

ولكن المحتوى على هاتين الصفحتين متطابقة؟هل من الممكن لطريقين مشاركة نفس صفحة المحتوى؟إذا لم يكن الأمر كذلك، فهل يمكنني أ) إنشاء قاعدة واحدة لكلا المسارين أو ب) هل يجب علي إنشاء عنصر تحكم مستخدم للمشاركة بين صفحتي المحتوى لعرض بياناتي؟

    routes.MapRoute(
       "NameById",
       "Name/{theName}/{nameId}",
        new
        {
            action = "NameById",
            controller = "ShowName",
            theName = "Charley"
        }
        ,new { nameId = @"\d+" }
   );

    routes.MapRoute(
       "ShowName",
       "Name/{theName}",
        new
        {
            action = "Index",
            controller = "ShowName",
            theName = "Charley"
        }
   );

يحررلقد قرأت الإجابات أدناه ولدي طرق نتائج الإجراء التالية.إذا قمت بإزالة إحدى الطرق (على سبيل المثال.الفهرس) فكيف يمكنني إعادة كتابة مساراتي إلى مسار واحد؟

public ActionResult Index(string theName)
public ActionResult NameById(string theName, int? nameId)

إذن عمل عنوان url التالي؟

/Name/Charley
/Name/Charley/11234
هل كانت مفيدة؟

المحلول

هل تحتاج حقًا إلى طريقين مختلفين؟يمكنك عمل النمط لمسار الفهرس الخاص بك

Name/{theName}/{nameId}

وصنع معرف الاسم مدخلات لاغية لعملك.ثم قم فقط بإضافة بعض المنطق إلى الإجراء الخاص بك والذي يتحقق مما إذا كان nameId له قيمة ويتصرف وفقًا لذلك.

نصائح أخرى

يمكنك إنشاء عرض جزئي لمنطقة تفاصيل الصفحة، مع الحفاظ على الفصل بين الإجراءين في حالة تغييرهما في وقت لاحق.أو يمكنك فقط

return View("DetailView", model);

ولكن يمكن أن يقدم ذلك سلسلة إضافية للإدارة بين إجراءي وحدة التحكم.نظرًا لأن MVC لا يدعم التحميل الزائد حسب اسم الإجراء (ما لم يكن لديك زوج GET/POST، زوج بدون وسائط)، يمكنك فقط التحقق من المعلمة {nameId} ومعرفة ما إذا كانت فارغة/فارغة قبل استخدامها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top