0

コントローラーから 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 フィールド名のプレフィックスを付けることはできますか? これを機能させる方法について何か考えはありますか?私のアプローチ全体が完全に間違っているかもしれませんが、それは問題ありません。理由を教えてください。:)

ご協力いただきありがとうございます。

4

1 に答える 1

1

探しているものを達成する方法を詳しく説明している次のブログ投稿を読むことをお勧めします。

于 2010-12-01T07:23:40.447 に答える