ASP.NET MVC2: изменение свойства master css в зависимости от параметра строки запроса - PullRequest
1 голос
/ 17 сентября 2010

Я мигрирую веб-сайт на новый с использованием ASP .NET MVC2.

На исходном сайте главная страница имеет код для проверки значения параметра строки запроса.В зависимости от этого значения программный код динамически изменяет некоторые свойства CSS, чтобы скрыть / отобразить элементы главной страницы.

Поскольку MVC2 не имеет никакого программного кода, поскольку мы должны выполнять все в контроллерах, как я должен поступить вв этом случае?

Я вижу это: asp.net mvc модифицирует мастер-файл из представления

Это частично отвечает моим потребностям, но обработка строки запроса является общей для всех страниц,Как я могу переместить эту обработку в общий раздел кода?

С уважением.

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Вспомогательный метод выглядит как хорошее место:

public static class HtmlHelperExtensions
{
    public static string GetCss(this HtmlHelper htmlHelper)
    {
        // read some request parameter
        // here you also have access to route data so the
        // parameter could be part of your custom routes as well
        var foo = htmlHelper.ViewContext.HttpContext.Request["foo"];

        // based on the value of this parameter 
        // return the appropriate CSS class
        return (foo == "bar") ? "barClass" : "fooClass";
    }
}

И где-то на вашей главной странице:

<body class="<%= Html.GetCss() %>">

Или, если вы всегда собираетесь применять его только к тегу body, возможно, было бы более уместно сделать это для уменьшения супа тега:

public static class HtmlHelperExtensions
{
    public static MvcHtmlString StartBody(this HtmlHelper htmlHelper)
    {
        var body = new TagBuilder("body");
        var foo = htmlHelper.ViewContext.HttpContext.Request["foo"];
        var bodyClass = (foo == "bar") ? "barClass" : "fooClass";
        body.AddCssClass(bodyClass);
        return MvcHtmlString.Create(body.ToString(TagRenderMode.StartTag));
    }
}

и на главной странице вместо тега body:

<%= Html.StartBody() %>
0 голосов
/ 17 сентября 2010

Я могу придумать два решения для этого:

  1. Извлеките свои контроллеры из одной базы контроллеров и установите там параметр ViewData в зависимости от опубликованных значений формы

  2. Не используйте ViewData вообще, просто найдите значение формы в представлении (используя HttpContext.Current)

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

...