لماذا سلاسل الاستعلام في طريق ASP.NET MVC الخاص بي؟

StackOverflow https://stackoverflow.com/questions/224484

سؤال

على موقع ASP.NET MVC (BETA) الذي أقوم بتطويره أحيانًا ، ستعود مكالمات إلى ActionLink إلى عناوين URL التي تحتوي على سلاسل استعلام. لقد عزلت الظروف التي تنتج هذا السلوك ، لكنني ما زلت لا أفهم لماذا ، بدلاً من إنتاج عنوان URL نظيف ، يقرر استخدام معلمة سلسلة الاستعلام. أعلم أنه من الناحية الوظيفية هم نفسه ، ولكن من أجل الاتساق (ومظهر) عناوين URL ، هذا ليس ما أريد.

ها هي طريقي:

routes.MapRoute(
    "Photo Gallery Shortcut",
    "group/{groupname}",
    new { controller = "Photos", action = "All", Id = "" });

routes.MapRoute(
    "Tagged Photos", //since the Tagged action takes an extra parameter, put it first
    "group/{groupname}/Photos/Tagged/{tagname}/{sortby}",
    new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" });

routes.MapRoute(
    "Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly
    "group/{groupname}/Photos/{action}/{sortby}",
    new { controller = "Photos", action = "All", Id = "", SortBy = "" });

routes.MapRoute(
    "Group",  //<-- "Group" Category defined above
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "Index", Id = ""});

الآن لا تحدث المشكلة فقط عندما أنظر إلى العرض الموضح في المسار المسماة "الصور الموسومة" وتنفيذ ActionLink عبر:

Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")

الذي ينتج عنوان URL:

http://domain/group/GROUPNAME?sortBy=

من أي وجهة نظر أخرى ، فإن عنوان URL المنتج هو:

http://domain/group/GROUPNAME

لقد هبطت فيلز ASP.NET توجيه الأخطاء, ، ويظهر كل شيء بالترتيب. هذا واحد قد عثرت. أيه أفكار؟

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

المحلول

لست متأكدًا من سبب إنتاج وجهات النظر المختلفة عناوين URL مختلفة.

ولكن يمكنك التخلص من هذا التصوير من خلال تعيين قيمة افتراضية إلى المسار الأول.

جديد {sortby = ""}

أثناء الجيل ، إذا كان Sortby يتطابق مع الافتراضي ، فسيتخطى محرك الطريق هذه المعلمة (إذا كانت في سلسلة الاستعلام).

نصائح أخرى

سيتعين عليك استخدام الطرق المسماة هنا ، وليس طرق الإجراءات ، بسبب الطريقة التي يعمل بها التوجيه في ASP.NET ، لأنه "المباراة الأولى" ، وليس "أفضل مباراة".

أعتقد أنه يلتقط طريقك الأول. لديها أيضا العمل كل شيء. ولأن الجهاز غير محدد ، فإنه يعرضه كمعلمة QueryString

سيظل هذا يعمل مع طريقة الإجراء "All" على photoscontroller ، لأنه يملأ معلمة Sortby فقط بقيمة سلسلة الاستعلام.

في المسار ، هل تنفذ الطريق الثالث أم الأول؟

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