2

二人の連絡先が記載された保険加入フォームを持っています。連絡先エントリのRazor部分ビューを作成し、フォームに2回入力しました。'master'ビューモデル(VmApplicationForm)には、2つの連絡先に対応する補助ビューモデル(VmPolicyHolder)の2つのインスタンスと、両方の連絡先に共通するいくつかのプロパティが含まれています。私は電話@Html.RenderPartial("_CreateOrEdit", Model.contactInfo1)をかけて@Html.RenderPartial("_CreateOrEdit", Model.contactInfo2)いて、ページにいます。この配置では(驚くことではありませんが)、レンダリングされたコードにはフォーム入力要素のIDが重複しています。

RenderPartialにIDとName属性のプレフィックスを付ける方法はありますか?ドキュメントではこれを確認できませんでしたが、何かを見逃した可能性があります。

4

2 に答える 2

4

申し訳ありませんが、サンプルコードを提供する時間はまだありませんが、アイデアを提供します。最初に、おそらくクラスと呼ばれるもののEditorTemplateを作成する必要があります。ContactInfo次に、基本クラス(2つの連絡先を保持する)編集ビューで、次のように記述します。

@Html.EditorFor(model => model.contactInfo1)
@Html.EditorFor(model => model.contactInfo2)

このようにして、そのEditorTemplateをレンダリングし、その中の入力に正しいIDと名前を生成します。

于 2011-08-03T16:15:27.103 に答える
-1

あなたがしていることは、フォームにアイテムのコレクションを投稿しようとしています-これは確かにMVC(およびFORMタグを使用する任意のWebページ/アプリケーション)で行うことができますが、IDの衝突を避けるために特別な処理が必要です投稿データを正しくフォーマットします。スティーブサンダーソンはこれを達成する方法についての素晴らしい投稿をしています:

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

基本的に、要素ID(この場合は各contactInfo)に一意のGUIDを追加し、タグに適切な配列形式を作成するためのラッパーです。例えば<input name="ContactInfo[f2cc4d6b-fc32-45e9-9d3d-fce54c3fede3].FirstName">

モデルがContactInfoのようなものである場合、次のように投稿することになります。

[HttpPost]
public ActionResult Index(IEnumerable<ContactInfo> contacts)
{
    // To do: do whatever you want with the data
}
于 2011-08-03T16:24:16.237 に答える