MVC ActionLink توليد أنواع مختلفة من الروابط ... لماذا؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

أنا جديد على أرض MVC، ولدي تطبيق أنا أعمل عليه. لدي 2 روابط مختلفة مع 2 طرق في بلدي العالمي مماثلة إلى حد ما

الطريق 1.

routes.MapRoute("Category", "Movies/{category}/{subcategory}", 
    new { controller = "Catalog", action = "Index", category = "", subcategory = "" });

الطريق 2.

routes.MapRoute("Movie", "Movie/{movie}", 
    new { controller = "Movie", action = "Index", movie = "" });

عندما استدعاء ActionLink للطريق الأول، فإنه يخلقه كما أعتقد أنه يجب:

.../Movies/Category/SubCategory

ومع ذلك، عندما أقوم بإنشاء الرابط الثاني الذي يملأه مثل هذا:

.../Movie?movieId=ff569575-08ec-4049-93e2-901e7b0cb96a

كنت أستخدم سلسلة بدلا من guid من قبل وكان لا يزال يفعل نفس IE

.../Movie?movieName=Snatch

يتم إعداد الإجراءات الخاصة بي على النحو التالي

<%= Html.ActionLink(parent.Name, "Index", "Catalog",
    new { category = parent.Name, subCategory = "" }, null)%>

<%= Html.ActionLink(movie.Name, "Index", "Movie", 
    new { movieId = movie.MovieId }, null)%>

ما زال تطبيقي يعمل، لكنني اعتقدت أن هذا السلوك كان غريبا. أي مساعدة سيكون رائعا.

شكرا!

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

المحلول

routes.MapRoute("Movie", "Movie/{movieId}", 
    new { controller = "Movie", action = "Index", movie = "" });

إذا لم يتطابق نص الطريق إلى اسم الممتلكات التي تقدمها إلى رابط MVC؟

نصائح أخرى

المشكلة هي أنه عند استدعاء ActionLink، لا يمكن لنظام التوجيه معرفة أي من المساراتتين للاستخدام، لذلك يختار الأول. الحل هو استخدام Routelink بدلا من ActionLink. يتيح لك Routelink تحديد اسم المسار لاستخدامه عند إنشاء URI. ثم لا يوجد غموض في أي طريق لاستخدامه. أعتقد أن AccessLink قديم. أستطيع أن أفكر في أي سبب لاستخدامها بدلا من Routelink.

ومع ذلك، قد لا يزال لديك مشكلة عندما يقدم المستخدم الروابط. في هذه الحالة، استخدم قيود الطرق لفرض اختيار المسار الصحيح.

أندرو صحيحة (تم التصويت عليه) أن الرموز التي تستخدمها في ActionLink / Routelink وتتابق الطريق نفسه.

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