2

これは私を完全に困惑させたので、周りに尋ねて、これに対する解決策があるかどうかを確認することにしました!

私は現在取り組んでいる発券システムを持っており、フィールドの 1 つは「主連絡先」です。コードは以下のとおりです。

<tr>
    <td>
        @Html.Label("Client Contact:")
    </td>
    <td>
        @Html.TextBoxFor(model => model.PrimaryContact, new { placeholder = "Primary contact for this ticket." })
        <br />
        @Html.ValidationMessageFor(model => model.PrimaryContact)
    </td>
</tr>

ユーザーに機能のリクエストがありました。彼らがクリックできる「+」ボタンを言う機能と、別のフィールドを追加する機能 (私は JavaScript を使用してこれを実現します。) ただし、JavaScript によって作成されたフィールドを Model.PrimaryContact にバインドする必要があります。基本的に、ユーザーが別の連絡先に別のテキストボックスを追加すると、「Model.PrimaryContact」の値は次のようになります。

Billy Joe 918-555-5556,Bobby Jane 876-222-3334

次に、これがコントローラーにポストされたら、それをデータベースに挿入するだけです。

これがどのように達成されるかはよくわかりませんが、コンマで区切られたカスタムモデルバインダーが必要になると思いますか?

どんな助けでも大歓迎です!

4

2 に答える 2

1

かなり前にこのアプローチを使用しました:
http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

今私はこれを使用しています:
http://blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style/

このものが役立つことを願っています=)

于 2012-10-09T21:24:32.173 に答える
1

「model.PrimaryContacts」を文字列のリストに変更してList<string>レンダリングします。

    <input type="text" id="PrimaryContacts[0]" name="PrimaryContacts[0]" value="" />
    <input type="text" id="PrimaryContacts[1]" name="PrimaryContacts[1]" value="" />
    <input type="text" id="PrimaryContacts[2]" name="PrimaryContacts[2]" value="" />
    <input type="text" id="PrimaryContacts[3]" name="PrimaryContacts[3]" value="" />

「name」属性が各フィールドで同じであることが重要です(id は関係ありません)。それらは自動的に配列またはコレクションにバインドされます。

アップデート:

PrimaryContact が FirstName、LastName、および PhoneNumber プロパティを持つオブジェクトであると仮定すると、ページに次のマークアップをレンダリングする必要があります。

    <!-- 1st person -->
    <input type="text" id="[0].FirstName" name="[0].FirstName" value="" />
    <input type="text" id="[0].LastName" name="[0].LastName" value="" />
    <input type="text" id="[0].PhoneNumber" name="[0].PhoneNumber" value="" />
    <!-- 2nd person -->
    <input type="text" id="[1].FirstName" name="[1].FirstName" value="" />
    <input type="text" id="[1].LastName" name="[1].LastName" value="" />
    <input type="text" id="[1].PhoneNumber" name="[1].PhoneNumber" value="" />

上記はオブジェクトにバインドしList<PrimaryContact>ます。

更新 2:

最後になりましたが、にバインドするには、次のようにDictionary<string, PrimaryContact>します。

<!-- 1st person -->
<input type="hidden" id="[0].Key" name="[0].Key" value="1stPersonKey" />
<input type="text" id="[0].FirstName" name="[0].Value.FirstName" value="" />
<input type="text" id="[0].LastName" name="[0].Value.LastName" value="" />
<input type="text" id="[0].PhoneNumber" name="[0].Value.PhoneNumber" value="" />
<!-- 2nd person -->
<input type="hidden" id="[1].Key" name="[1].Key" value="2ndPersonKey" />
<input type="text" id="[1].FirstName" name="[1].Value.FirstName" value="" />
<input type="text" id="[1].LastName" name="[1].Value.LastName" value="" />
<input type="text" id="[1].PhoneNumber" name="[1].Value.PhoneNumber" value="" />

これが少し役立つことを願っています

于 2012-10-09T21:29:34.570 に答える