لماذا سلاسل الاستعلام في طريق ASP.NET MVC الخاص بي؟
-
03-07-2019 - |
سؤال
على موقع 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 فقط بقيمة سلسلة الاستعلام.
في المسار ، هل تنفذ الطريق الثالث أم الأول؟