ASP.NET MVC Beta Support List< T>のModel Binderはありますか?
-
03-07-2019 - |
質問
以下のサンプルクラスをご覧ください。フォームに顧客と2つの住所(リストから)を表示したい。 MVCベータ版のモデルバインダーはこれをサポートしていますか、それとも独自のカスタムバインダーを作成する必要がありますか?
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Address> Addresses { get; set; }
public Customer()
{
Addresses = new List<Address>();
}
}
public class Address
{
public int Line1 { get; set; }
public int Line2 { get; set; }
public int City { get; set; }
public int State { get; set; }
public int Zip { get; set; }
}
フィールドをどのようにコーディングしますか?こんな感じ?
<!-- some HTML formatting -->
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[0].Line1)%>
<!-- some more HTML formatting -->
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[1].Line1)%>
<!-- end of HTML form formatting -->
解決
試したことはありませんが、この投稿、リストへのモデルのバインドに関するもので、多分あなたを助けることができます。
他のヒント
MvcContribのNameValueDeserializerを使用して、より簡単にします。ページがViewPage&lt; Customer&gt;から派生したと仮定しましょう。これを行うことができます:
<%= Html.TextBox("Address[0].Line1", ViewData.Model.Address[0].Line1)%>
<%= Html.TextBox("Address[1].Line1", ViewData.Model.Address[1].Line1)%>
そしてこれ:
public ActionResult Save([Deserialize]Customer customer)
そして、顧客はアドレスコレクションが読み込まれたフォームポストからデシリアライズされます。インデックスは順番に並んでいる必要はありません-これにより、投稿が発生する前にクライアント側で行を削除する場合がサポートされます。
(モデルの代わりに)ビューデータディクショナリから何かを逆シリアル化する場合、構文は[Deserialize(&quot; customer&quot;)]のようになります。ここで&quot; customer&quot;プレフィックスです。
このブログ投稿興味深く関連性があります。
これを完了するだけです。 Indexという名前の隠しフィールドを使用することが重要です。したがって、上記の私のコードは次のようになります。
<!-- some HTML formatting -->
<%= Html.Hidden("customer.address.Index", 0) %>
<%= Html.TextBox("customer.address[0].line1", ViewData.Customer.Address[0].Line1)%>
<!-- some more HTML formatting -->
<%= Html.Hidden("customer.address.Index", 1) %>
<%= Html.TextBox("customer.address[1].line1", ViewData.Customer.Address[1].Line1)%>
<!-- end of HTML form formatting -->
それは魅力のように機能します!
そのようなViewDataでオブジェクトリストを渡すことができますが、行の一部を変更する必要があります。詳細はこちら:
およびここ:
ASP.NET MVC:ビューのリピーターに(モデルのクラスから)リストを渡す方法は?
これが役立つことを願って
編集
モデルを使用する場合、最初にDataContextを設定してリストを選択する必要がありますが、LINQを使用する場合は生成されたクラスを使用できることを確認してください。
同様のオブジェクトを定義しました。上記のリストへのバインディングに関する投稿に従いました。バインディングが機能している間、コントローラーのアクションパラメーターでバインドホワイトリストまたはブラックリストを使用できませんでした。モデルはIListです