كيف يمكنني إضافة معلمة لربط/تجزئة إلى إعادة تدوير؟
-
22-09-2019 - |
سؤال
أرغب في استخدام إعادة توجيه إعادة توجيه إلى عنوان URL مثل /المستخدمين /4#ملخص. باستخدام ASP.NET MVC 1.0 ، لم أتمكن من إيجاد طريقة للقيام بذلك - هل فاتني ذلك؟
المحلول
يجب عليك إنشاء طرقك بشكل صحيح في جدول المسار. على سبيل المثال:
routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });
نصائح أخرى
urlhelper.generateurl يتضمن معلمة جزء. لقد قمت بإنشاء طريقة تمديد
public static string Action(this UrlHelper url, string actionName, string controllerName, string fragment, object routeValues)
{
return UrlHelper.GenerateUrl(
routeName: null,
actionName: actionName,
controllerName: controllerName,
routeValues: new System.Web.Routing.RouteValueDictionary(routeValues),
fragment: fragment,
protocol: null,
hostName: null,
routeCollection: url.RouteCollection,
requestContext: url.RequestContext,
includeImplicitMvcValues: true /*helps fill in the nulls above*/
);
}
ثم قمت بإنشاء فئة RedirectToFragmentResult
public class RedirectToFragmentResult: RedirectResult
{
public UrlHelper Url {get;set;}
public string Action { get; set; }
public string Controller { get; set; }
public string Fragment { get; set; }
public object RouteValues { get; set; }
public RedirectToFragmentResult(UrlHelper url, string action, string controller, string fragment, object routeValues)
:base(url.Action(action, controller, fragment, routeValues))
{
Url = url;
Action = action;
Controller = controller;
Fragment = fragment;
RouteValues = routeValues;
}
}
بعد ذلك ، يمكنك فقط إنشاء مُحسّن روتيني جديد (result.routevalues) في اختبار الوحدة الخاص بك للتحقق من ذلك بالطريقة التي تريدها مع إعادة تدوير.
واجهت مشكلة مماثلة ، ألقِ نظرة هنا:
الارتباط بالموقع في الصفحة (#ID) من خلال آليات ASP.NET MVC؟
انتهى بي الأمر بإنشاء مسار باستخدام #.
أفعل شيئًا كهذا على موقعي هنا. لكنها ليست مع RedirectToRouteResult
. RedirectToRouteResult
لا يدعم بما في ذلك جزء المرساة لعنوان URL.
تحتاج إلى بناء الرابط بنفسك وربما حتى المنطق للتعامل مع معالجة جزء المرساة - كما فعلت. يحاول طلبي تكرار الوظائف المشابهة لوجهات نظر معرض الصور على Facebook. يجب أن يكون لكل رابط إلى صفحة مختلفة عنوان URL فريد ، لذا فأنا أستخدم جزء المرساة. لكن Coz لا يترجم مباشرة إلى مسار يجب أن أقوم بتحليل الجزء المرساة من عنوان URL يدويًا على الصفحة واستخدام Ajax لتحميله في المحتوى المناسب. هذا ما أردت لذلك يعمل بالنسبة لي.
تحميل رمز المصدر لـ MVC وتحقق من كيفية عمل redirectorouteresult
قد تكون هناك طرق أفضل ولكن ميراثًا بسيطًا لـ REDIRECTTOROUTERESULT وتجاوز من التنفيذ للسماح بجزء مرساة اختياري يجب أن يصلح المشكلة