لماذا يقوم Routelink بإنشاء عنوان URL ودية أثناء ActionLink لا؟
-
20-09-2019 - |
سؤال
لدي سؤال بشأن Routelink مقابل ActionLink.
النظر في الطريق التالي
routes.MapRoute("Routename1",
"{someEnum}/SpecificAction/{id}/{stringId}",
new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" },
new { someEnum= "(EnumVal1|EnumVal2)" }
);
الجزء الغريب {sometyum} هو لأنني أستخدم وحدة تحكم عامة لجميع قيم العادة التي تشكل جزء التحكم النموذجي من عنوان URL. على سبيل المثال، / enumval1 / action / and enumval2 / action / استخدام نفس وحدة التحكم. هذا ليس جزءا من المشكلة، ولكن.
النظر في الاتجاهين التاليين للربط:
<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%>
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%>
يولد Routelink عنوان URL الصحيح، والذي سيكون / Enumval1 / 32 / Yatzy
يقوم ActionLink بإنشاء عنوان URL يشبه / enumval1 / setion / 32؟ str string = yatzy
لماذا هذا؟ يمكن للشخص أن يفسر هذا بالنسبة لي، من فضلك.
المحلول
RouteLink
يمكن فقط استخدام مسار واحد تحدده. ActionLink
سوف تستخدم الطريق المطابق الأول، سواء كان الشخص الذي تقصده أم لا. ربما تكون الأمثلة الخاصة بك مطابقة طرق مختلفة.
Phil Haack Routing Debugger سوف تساعد في توضيح هذا.