17

ViewBag.TitleRazor テンプレートの上部に設定すると、期待される値Model.Titleではなく、の値を使用してエディター テンプレートのテキスト ボックスが入力されます。明示的に呼び出すと、この動作は発生しません。ViewBag.TitleModel.TitleHtml.EditorFor(x => Model.Title)

ViewBag.Titleモデルのカスタム エディター テンプレートを維持せずに、エディター テンプレートに値が表示されないようにするにはどうすればよいですか?

コード

@{
    ViewBag.Title = "Edit Post " + Model.Title;
}

@Html.EditorFor(x => Model.Title) @* renders "My Title" text box *@
@Html.EditorFor(x => Model)       @* renders "Edit Post My Title" text box *@
4

3 に答える 3

7

によって使用される値は、 、およびHtml.EditorForの 3 つの場所から取得できます。ちなみに、とは同じもので、同じ基になる辞書を操作する 2 つの方法です。ModelStateViewDataModelViewDataViewBag

そのため、フォームを操作する際の競合を避けるために、代わりに Model を使用するか、 のような接頭辞を使用できますViewBag._Title


この場合ViewBag.Title、レイアウトとデータを共有するために使用され、Page.Titleビュー データの変更を気にせずに行うこともできます。

于 2013-01-17T02:03:09.663 に答える
3

ViewBag.Title割り当てをページの一番下に移動するとうまくいきました。

于 2015-04-30T16:46:27.067 に答える
2

これを回避する簡単な方法は、を使用しないことViewBagです。

ViewBagは動的オブジェクトであり、優先されます。しかし、そこにはほとんど何でも詰め込むことができ、デバッグが難しくなります。

結論:タイトルなどの動的なものを表示する必要がある場合は、それをに入れますModel

于 2013-01-04T09:50:02.167 に答える