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

StackOverflow https://stackoverflow.com/questions/1796177

  •  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 для разрешения необязательной привязочной части должно решить проблему

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top