1

ASP.NETMVC2を使用してWebサイトを新しいWebサイトに移行しています。

元のサイトでは、マスターページにクエリ文字列パラメーター値をチェックするためのコードビハインドがあります。この値に応じて、コードビハインドは一部のCSSプロパティを動的に変更して、マスターページ要素を非表示/表示します。

MVC2には、コントローラーですべてを実行することになっているため、コードビハインドがないため、この場合、どのように進める必要がありますか?

私はこれを見ます:ビューからマスターファイルを変更するasp.netmvc

それは私のニーズに部分的に答えますが、クエリ文字列処理はすべてのページに共通です。この処理を共通のコードセクションに移動するにはどうすればよいですか?

よろしく。

4

2 に答える 2

1

ヘルパーメソッドは良い場所のように見えます:

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() %>
于 2010-09-17T07:44:31.093 に答える
0

私はこれに対する2つの解決策を考えることができます:

  1. 1つのコントローラーベースからコントローラーを派生させ、投稿されたフォーム値に応じてそこにViewDataパラメーターを設定します

  2. ViewDataはまったく使用しないでください。ただし、ビューでフォームの値を探すだけです(HttpContext.Currentを使用)。

2番目の方法はMVCパターンに違反します。IMO一部のシナリオでは引き続き許容されます。たとえば、このアプローチを使用して、ナビゲーションメニューで現在選択されている項目を強調表示しています。

于 2010-09-17T07:45:59.150 に答える