コントローラーから Html.EditorFor() と同等の機能を呼び出す方法を知っている人はいますか?
ビューに標準テーブルがあります。行は EditorTemplate を利用します
<table id="tableOfBar">
<tfoot>
<tr><td colspan="2">Some paging controls and whatnot</td></tr>
</tfoot>
<tbody>
<% for (int i=0;i<Model.Rows.Count();i++)
{
int j = i;
%><%: Html.EditorFor(m => m.Rows[j], "FooRowTemplate", "Rows["+j+"]", new { OtherViewDataStuff})%>
</tbody>
</table>
エディター テンプレートは、子要素と子要素を返す厳密に型指定された部分ビューです<tr>
。
これですべて問題なく動作しますが、次のステップは「行を追加」ボタンを追加することです。ここでは範囲外の多くの理由により、純粋にクライアント側のソリューションではなく、サーバーにアクセスしたいと考えています。私がやろうとしているのは、EditorTemplate を Partial View として返し、JavaScript で返された Html をテーブルに追加することです。
[HttpPost]
public ActionResult AddRow(FooModel model)
{
var row = new FooRowModel();
model.AddRow(row);
var index = model.Rows.IndexOf(row);
return PartialView("~/Areas/MyArea/Views/Shared/EditorTemplates/FooRowTemplate.ascx", model.Rows[index]);
}
入力の命名を除いて、すべてが正常に機能します。欠落している部分は、ポストバックでモデルを再構築する方法を Model Binder に指示するコレクション プレフィックスです。ビュー側では、これがどうあるべきかを指定できます (それは上記の呼び出しの"Rows["+j+"]"
一部です)。EditorFor()
EditorFor() のように、部分ビューに html フィールド名のプレフィックスを付けることはできますか? これを機能させる方法について何か考えはありますか?私のアプローチ全体が完全に間違っているかもしれませんが、それは問題ありません。理由を教えてください。:)
ご協力いただきありがとうございます。