私はMVCに次のモデルを持っています:
public class IndexViewModel
{
public SubViewModel SubViewModel { get; set; }
}
私のインデックスビューでは、次のエディタを表示するために次のことを行っていますSubViewModel
。
Index.cshtml
@model IndexViewModel
@Html.EditorFor(m => m.SubViewModel)
私のSubViewModel.cshtml
ファイルでは、次のことを試みました。
EditorTemplates / SubViewModel.cshtml
@model SubViewModel
@Html.EditorForModel("SubViewModelForm")
基本的に、エディターを2つに分割したいと思います。最初のエディターテンプレートがフォームを作成し、内側のテンプレートが実際のフォームフィールドをすべて作成します。問題は、内部ビューがレンダリングされないことです。
これは、MVCが、そのモデルで既にEditorForを呼び出していることを認識し、それを再度実行できないようにしているようなものです。これを機能させる方法はありますか?
編集
何が起こっているのかをはっきりとタイプしたと思いましたが、そうではないと思います。
2つのテンプレートを使用して1つのモデルを表示したいと思います。最初のテンプレートでは、フォームと送信ボタン、およびいくつかのコンテナdivをレンダリングします。
2番目のテンプレートでは、すべてのフォームフィールドをレンダリングします。
Index.cshtml @ Html.EditorFor(m => m.SubViewModel)->フォームとコンテナをレンダリングします
SubViewModel.cshtml @ Html.EditorForModel( "SubViewModelForm")->フォームフィールドをレンダリングします
問題は、2番目の呼び出し(@ Html.EditorForModel( "SubViewModelForm"))が何もしないように見えることです。タグをまったくレンダリングしません。MVCによって無視されています。
この方法でやりたいのは、このフォームをajax呼び出しで投稿するためです。すべてが正常である(モデルの状態が有効である)場合は、JSONデータをビューに返します。モデルが無効な場合は、フォームフィールドのみを含む部分ビューを返します。このようにして、すべてのイベントハンドラーを再度接続する必要はありません。ビュー全体ではなく、フォームフィールドを置き換えることができます。