ASP.NET MVC では、、、および(詳細については、このブログ投稿ViewBagを参照してください) を自由に使用できます。は辞書の動的ラッパーです。と同等です。ビューでプロパティを使用すると、取得しています。自分で探してください:ViewDataTempDataViewBagViewDataViewBag.Prop = "value"ViewData["Prop"] = "value"ModelViewData.Model
public abstract class WebViewPage<TModel> : WebViewPage
{
private ViewDataDictionary<TModel> _viewData;
public new AjaxHelper<TModel> Ajax { get; set; }
public new HtmlHelper<TModel> Html { get; set; }
public new TModel Model { get { return ViewData.Model; } }
}
ViewBagまたはのいずれかを使用ViewDataして、あなたの特別なプロパティを保持することで、目的を達成できます。最初のステップは、必要なプロパティを使用して のカスタム派生を作成するWebViewPage<TModel>ことです。
public abstract class CustomWebViewPage<TModel> : WebViewPage<TModel>
{
public IList<string> Messages
{
get { return ViewBag.Messages ?? (ViewBag.Messages = new List<string>()); }
}
}
@model YourModelClassビューに移動し、行(最初の行) を次のように置き換えます。
@inherits CustomWebViewPage<YourModelClass>
Messagesビューでプロパティを使用できるようになりました。
@String.Join(", ", Messages)
コントローラーで使用するには、おそらくそこからプロパティを派生さControllerせて追加することもできます。
public abstract class CustomControllerBase : Controller
{
public IList<string> Messages
{
get
{
return ViewBag.Messages ?? (ViewBag.Messages = new List<string>());
}
}
}
そのコントローラーから派生する場合は、新しいプロパティを使用できます。リストに入力したものはすべて、ビューでも使用できます。
public class ExampleController : CustomControllerBase
{
public ActionResult Index()
{
Messages.Add("This is a message");
return View();
}
}
プロパティのゲッターが短くなったので、ViewBag を使用しました。ViewData必要に応じて ( ) でも同じことができますViewData["Messages"]。
これは の実装方法とはまったく同じではありませModelん。保存しているキーを誰かが使用すると誤ってプロパティが上書きされる可能性があるためです。
さらに深く掘り下げると、そこから派生しViewDataDictionaryてそこにプロパティを配置し、代わりにそれを使用するためにコントローラーとビュー メソッドの一部をオーバーライドできる場合があります。次に、プロパティは とまったく同じになりますModel。しかし、それはあなたに任せましょう - 私はそれが価値があるとは思わない.