Я хочу использовать RedirectToRouteResult для перенаправления на url like/users/4 # Summary. Используя ASP.NET MVC 1.0, я не смог найти способ сделать это - пропустил ли я это?
Как добавить параметр для привязки/хеша к RedirectToRouteResult?
Ответ 1
Вы должны правильно построить свои маршруты в таблице маршрутов. Например:.
routes.MapRoute("MyRoute" ,"{controler}/{id}#{detail}" ,new { controller = "users", action = "index", id = (string)null, detail = "Summary" });
Ответ 2
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 (result.RouteValues) в своем unit test, чтобы проверить его так, как вы бы с RedirectToRouteResult.
Ответ 3
У меня была аналогичная проблема, посмотрите здесь:
Ссылка на местоположение на странице (#id) через механизмы MVC ASP.NET?
В итоге я создал маршрут, используя #.
Ответ 4
Я делаю что-то подобное на своем сайте здесь. Но это не с RedirectToRouteResult
. RedirectToRouteResult
не поддерживает включение якорной части в URL.
Вам нужно построить ссылку самостоятельно и, возможно, даже логику обработки обработки якорной части - как и я. Мое приложение пытается реплицировать функциональные возможности, аналогичные функциям представлений фотогалереи Facebook. Каждая ссылка на другую страницу должна иметь уникальный URL-адрес, поэтому для этого я использую опорную часть. Но, несмотря на то, что он не переводится напрямую на маршрут, мне приходится вручную анализировать опорную часть URL-адреса на странице и использовать ajax для загрузки в соответствующем контенте. Это то, что я хотел, чтобы он работал у меня.
Ответ 5
Загрузите исходный код MVC и проверьте, как работает RedirectToRouteResult
Могут быть лучшие способы, но простое наследование RedirectToRouteResult и переопределение ExecuteResult, чтобы разрешить дополнительную привязку, должна устранить проблему