سؤال

لدي ActionLink التالي في رأيي

<%= Html.ActionLink("LinkText", "Action", "Controller"); %>

ويخلق عنوان URL التالي http://mywebsite.com/controllers.

قل أنا أضف معرف في النهاية مثل ذلك: http://mywebsite.com/controller/action/53. والانتقال إلى الصفحة. في هذه الصفحة لدي العلامات التي حددتها أعلاه. الآن عندما أنظر إلى عنوان URL، فهذا يشبه هذا:

http://mywebsite.com/controller/action/53. (لاحظ إضافة المعرف)

لكنني أريدها أن أزال المعرف وتبدو كما فعلت في الأصل، مثل هذا http://mywebsite.com/controllers. (لاحظ عدم وجود معرف هنا)

أي أفكار كيف يمكنني إصلاح هذا؟ لا أريد استخدام عناوين URL المشفرة الثابت منذ قد تتغير وحدة التحكم / الإجراءات الخاصة بي.

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

المحلول

الحل هو تحديد قيم الطريق الخاصة بي (المعلمة الثالثة أدناه)

<%= Html.ActionLink("LinkText", "Action", "Controller", 
    new { id=string.Empty }, null) %>

نصائح أخرى

يبدو أنك بحاجة إلى تسجيل طريق "الإجراء فقط" الثاني واستخدام HTML.RoutElink (). أولا تسجيل مسار مثل هذا في تطبيق بدء التشغيل:

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

ثم بدلا من ActionLink لإنشاء استخدام هذه الروابط:

Html.RouteLink("About","ActionOnly")

المشكلة هي الطريقة التي تم إنشاؤها في المدخلات من عنوان URL الخاص بك حاليا بالإضافة إلى ما تقدمه. يمكنك تجربة هذا:

<%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>

يجب أن مسح يدويا معلمة الهوية يدويا.

لا أعرف لماذا، لكنها لم تنجح بالنسبة لي (ربما بسبب MVC2 RC). تم إنشاء طريقة URLHELPER =>

 public static string
            WithoutRouteValues(this UrlHelper helper, ActionResult action,params string[] routeValues)
        {
            var rv = helper.RequestContext.RouteData.Values;
            var ignoredValues = rv.Where(x=>routeValues.Any(z => z == x.Key)).ToList();
            foreach (var ignoredValue in ignoredValues)
                rv.Remove(ignoredValue.Key);
            var res = helper.Action(action);
            foreach (var ignoredValue in ignoredValues)
                rv.Add(ignoredValue.Key, ignoredValue.Value);
            return res;
        }

إذا كنت كذلك لا تعرف القيم التي تحتاج إلى تجاوزها صراحة أو تريد فقط تجنب قائمة المعلمات الإضافية، يمكنك استخدام طريقة تمديد مثل أدناه.

<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>

تفاصيل التنفيذ هي في هذا آخر بلوق

أقوم بتعيين اسم الإجراء بشكل صريح ك "إجراء /". يبدو قليلا مثل الاختراق ولكنه حل سريع.

@Html.ActionLink("Link Name", "Action/", "Controller")

طريقة أخرى هي استخدام ActionLink (HTMLHELPER، السلسلة، السلسلة، Routevaluedictionary)، إذا لم تكن هناك حاجة لوضع NULL في المعلمة الأخيرة

<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>

يتم تغيير الحمل الزائد من HTML.ActionLink في الإصدارات الأحدث من MVC. على MVC 5 وما فوق. هذا هو كيفية القيام بذلك:

@Html.ActionLink("LinkText", "Action", "Controller", new { id = "" }, null)

ملاحظة مررت ب "معلمة الهوية واغتالية ل htmlattributes.

كنت بحاجة إلى روابط القائمة الخاصة بي لتكون ديناميكية. بدلا من تنفيذ الكثير من التعليمات البرمجية الإضافية والتوجيه لكل صفحة واحدة أنا بسيطة تم الاستغناء عن مساعد HTML.

<a href="@(item.websiteBaseURL)/@(item.controller)/@(item.ViewName)">@item.MenuItemName</a>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top