Поддержите querystring на всех страницах в mvc

Легкий-> я сделал метод расширения.NET некоторое время назад. Это все обернуто в единственном DLL, который можно использовать и ссылка. это не требует НИКАКОМУ ВЕБ-СЕРВИСУ или третьей стороне внешнего вызова API.

это также свободно.

это - также открытый исходный код. и тому подобное.

Обладают!

Это звонило IPAddressExtensions, и это находится на Codeplex.

6
задан Prasad 24 November 2009 в 11:23
поделиться

3 ответа

Отличное направление от @ eu-ge-ne.

Я использовал идею настраиваемого маршрута от @ eu-ge-ne, чтобы добавить значение маршрута к каждому URL-адресу, и использовал базовый контроллер для обработки клавиши предварительного просмотра в сеанс.

if ((requestContext.HttpContext.Request.QueryString != null &&
     requestContext.HttpContext.Request.QueryString["Preview"] != null &&
     requestContext.HttpContext.Request.QueryString["Preview"].ToString() =="True") ||
     (requestContext.HttpContext.Request.UrlReferrer != null &&
     requestContext.HttpContext.Request.UrlReferrer.ToString().Contains("Preview=True")))
    {
         //Add the preview key to session
    }
    else
    {
         //Remove the preview key to session
    }

Я использовал приведенный выше код в методе Initialize базового контроллера. Таким образом, ключ предварительного просмотра будет в сеансе, если строка запроса имеет предварительный просмотр, иначе он удаляется из сеанса.

Еще раз спасибо @ eu-ge-ne.

0
ответ дан 17 December 2019 в 20:32
поделиться

Может быть, вам нужен собственный маршрут?:

public class PreviewRoute : System.Web.Routing.Route
{
    ...

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        var preview = System.Web.HttpContext.Current.Session["Preview"];

        if (!values.ContainsKey("Preview"))
            values.Add("Preview", preview);

        var path = base.GetVirtualPath(requestContext, values);

        return path;
    }
}

}

Установите Сессию ["Предварительный просмотр"] в любое время, и вы получите все свои URL-адреса с помощью ? Preview = True :

System.Web.HttpContext.Current.Session.Add("Preview", true);

ОБНОВЛЕНО:

Используйте этот маршрут в Global.asax.cs:

routes.Add("Default",
    new PreviewRoute("{controller}/{action}/{id}", new MvcRouteHandler()) {
        Defaults = new RouteValueDictionary(
            new { controller = "Home", action = "Index", id = "" }
        )
    }
);

вместо:

routes.MapRouteLowercase(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Также вы можете попробовать это расширение:

public static class CustomRouteExtensions
{
    public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults) {
        routes.MapPreviewRoute(name, url, defaults, null);
    }

    public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults, object constraints) {
        if (routes == null) {
            throw new ArgumentNullException("routes");
        }

        if (url == null) {
            throw new ArgumentNullException("url");
        }

        var route = new PreviewRoute(url, new MvcRouteHandler()) {
            Defaults = new RouteValueDictionary(defaults),
            Constraints = new RouteValueDictionary(constraints)
        };

        if (String.IsNullOrEmpty(name)) {
            routes.Add(route);
        }
        else {
            routes.Add(name, route);
        }
    }
}

В Global .asax.cs:

routes.MapPreviewRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);
2
ответ дан 17 December 2019 в 20:32
поделиться

Вы можете создать помощника представления, который добавляет существующую строку запроса к любым ссылкам, которые вы создаете с помощью вашего нового помощника.

Это может помочь

Возможно, вам лучше сохранить это информация в сеансе.

0
ответ дан 17 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: