Как мне добавить параметр для привязки / хэша к результату RedirectToRouteResult?
-
22-09-2019 - |
Вопрос
Я хочу использовать RedirectToRouteResult для перенаправления на URL, подобный /users/4#Summary.Используя 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;
}
}
Затем вы можете просто создать новый RouteValueDictionary(результат.routeValues) в вашем модульном тестировании, чтобы проверить его так, как вы бы проверили с помощью RedirectToRouteResult .
У меня была похожая проблема, взгляните здесь:
Ссылка на местоположение на странице (#id) через ASP.NET Механизмы MVC?
В итоге я создал маршрут, используя #.
Я делаю что-то подобное на своем сайте здесь.Но это не с RedirectToRouteResult
. RedirectToRouteResult
не поддерживает включение привязочной части в URL-адрес.
Вам нужно самостоятельно создать ссылку и, возможно, даже логику для обработки части привязки - как это сделал я.Мое приложение пытается воспроизвести функциональность, аналогичную функциям просмотров фотогалереи Facebook.Каждая ссылка на другую страницу должна иметь уникальный URL, поэтому для этого я использую привязочную часть.Но поскольку это не переводится непосредственно в маршрут, мне приходится вручную анализировать привязочную часть URL-адреса на странице и использовать ajax для загрузки соответствующего контента.Это то, чего я хотел, так что у меня это работает.
Скачать исходный код MVC и посмотрите, как работает RedirectToRouteResult
Могут быть способы получше, но простое наследование RedirectToRouteResult и переопределение ExecuteResult для разрешения необязательной привязочной части должно решить проблему