سؤال

لدي المسار التالي، المسجل في ملفي global.asax.

routes.MapRoute(
    "Home", // Unique name
    "", // Root url
    new { controller = "Home", action = "Index", 
        tag = string.Empty, page = 1 }
);

kewl.عندما أبدأ تشغيل الموقع، فإنه يلتقط هذا المسار بشكل صحيح.

الآن، عندما أحاول القيام بما يلي برمجيًا، فإنه يُرجع NULL.

var pageLinkValueDictionary = 
    new RouteValueDictionar(linkWithoutPageValuesDictionary)
        {{"page", 2}};

VirtualPathData virtualPathData = 
    RouteTable.Routes.GetVirtualPath(viewContext, "Home"
        pageLinkValueDictionary);

// NOTE: pageLinkValueDictionary == 
//     Key: Action, Value: Index; Key: page, Value: 2

لماذا ممكن ان يحصل هذا؟

كان لدي انطباع بأنه سيجد المسار الرئيسي ولكنه سيضيف أي قيم لم يتم العثور عليها كعناصر سلسلة استعلام؟

تحديث

لا يوجد حتى الآن الحظ مع هذا.وأيضا باستخدام إم في سي آر سي, ، أنا الآن بحاجة إلى تغيير viewContext إلى veiwContext.RequestContext ..الذي يجمع ولكن ما زلت أحصل على نتيجة فارغة.

تحديث 2

عندما يكون لدي الطريق دون page=1 العنصر الافتراضي، الطريق وجد.على سبيل المثال.

routes.MapRoute(
        "Home",
        "",
        new { controller = "Post", action = "Index", tags = string.Empty }
    );

..و RouteTable.Routes.GetVirtualPath يعود أ VirtualPathData مثال.عندما أقوم بإضافة page=1 (القيمة الافتراضية) مرة أخرى، VirtualPathData المثيل الذي تم إرجاعه فارغ؟

هل كانت مفيدة؟

المحلول

حسنًا، سبب إرجاعها فارغًا هو عدم وجود مسار يحتوي على بيانات مسار "الصفحة".

هل يمكنك التوسع قليلاً في ما تحاول تحقيقه؟إذا كنت تريد إعادة التوجيه إلى صفحة بعنوان url /page/2 أو /?page=2 ، فيجب عليك استخدام RedirectToRoute أو RedirectToAction:

return RedirectToRoute("IndexDefault", new {page = "2"}); 

نصائح أخرى

أعتقد أن طريقك يجب أن يكون هكذا:

route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

أو (اعتمادًا على الشكل الذي يجب أن يبدو عليه عنوان URL الكامل)...

route.MapRoute("theRoute", "/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

سيظل هذا مطابقًا لطلب http://mysite.com/ وانتقل إلى قيم المسار الافتراضية المحددة أعلاه.ولكن الآن عند تحديد علامة أو صفحة، ستحصل على عنوان URL الذي تريده.

يجب عليك التحقق من اختبار طريق Phil:

مصحح أخطاء التوجيه ASP.NET

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