Как добавить параметр для привязки/хеша к RedirectToRouteResult?

Я хочу использовать RedirectToRouteResult для перенаправления на url like/users/4 # Summary. Используя ASP.NET MVC 1.0, я не смог найти способ сделать это - пропустил ли я это?

Ответ 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.

Ответ 4

Я делаю что-то подобное на своем сайте здесь. Но это не с RedirectToRouteResult. RedirectToRouteResult не поддерживает включение якорной части в URL.

Вам нужно построить ссылку самостоятельно и, возможно, даже логику обработки обработки якорной части - как и я. Мое приложение пытается реплицировать функциональные возможности, аналогичные функциям представлений фотогалереи Facebook. Каждая ссылка на другую страницу должна иметь уникальный URL-адрес, поэтому для этого я использую опорную часть. Но, несмотря на то, что он не переводится напрямую на маршрут, мне приходится вручную анализировать опорную часть URL-адреса на странице и использовать ajax для загрузки в соответствующем контенте. Это то, что я хотел, чтобы он работал у меня.

Ответ 5

Загрузите исходный код MVC и проверьте, как работает RedirectToRouteResult

Могут быть лучшие способы, но простое наследование RedirectToRouteResult и переопределение ExecuteResult, чтобы разрешить дополнительную привязку, должна устранить проблему