0

ViewBag の使用が嫌いなので、このブログ投稿の指示に従って、_layout.cshtml ファイルの厳密に型指定されたビュー モデルを作成しました。他のすべてのコントローラーが継承するベースコントローラーは次のとおりです。

public class BaseController : Controller
{
    protected BaseViewModel ModelBase { get; private set; }

    protected override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var contextItems = filterContext.HttpContext.Items;
        if (contextItems["ModelBase"] == null)
            filterContext.HttpContext.Items["ModelBase"] = this.ModelBase;

        base.OnResultExecuting(filterContext);
    }

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        this.ModelBase = new BaseViewModel
        {
            Theme = Request.QueryString["theme"] ?? "cyborg"
        };
        base.OnActionExecuting(filterContext);
    }
}

私がやろうとしているのは、「theme」というクエリ文字列変数を取得し、その値を Theme プロパティに追加することだけBaseViewModelです。ブログ投稿によると、レイアウト ビューで実行できるはずですが@ModelBase.Theme、インテリセンスが得られず、実行するとエラーがスローされます。

4

2 に答える 2

1

ここの Phil Haack の投稿で説明されているように、カスタムのカミソリ ビュー基本クラスが必要だと思います。

http://haacked.com/archive/2011/02/21/changeing-base-type-of-a-razor-view.aspx

于 2013-06-28T22:55:36.617 に答える