9

以下のクラスの例を見てください。顧客と 2 つの住所 (LIST から) をフォームに表示したいと考えています。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 -->
4

5 に答える 5

5

試したことはありませんが、この投稿を参照してください。これは、リストへのモデルのバインドに関するものです。役立つかもしれません。

于 2009-01-02T17:36:39.203 に答える
1

MvcContrib の NameValueDeserializer を使用して簡単にします。ページが ViewPage<Customer> から派生していると仮定しましょう。あなたはこれを行うことができます:

<%= 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("customer")] のようになります。ここで、"customer" はプレフィックスです。

このブログ投稿は興味深く関連性があると思われるかもしれません。

于 2009-01-03T15:32:49.247 に答える
1

これを完成させるだけです。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 -->

それは魅力のように機能します!

于 2009-01-05T18:37:02.543 に答える
0

そのようにViewDataでオブジェクトリストを渡すことができますが、いくつかの行を変更する必要があります. ここでもっと読む:

http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

そしてここ:

ASP.NET MVC: リスト (モデルのクラスから) をビューのリピーターに渡すにはどうすればよいですか?

お役に立てれば


編集


モデルを使用する場合は、最初に DataContext を設定してリストを選択する必要がありますが、LINQ を使用すると生成されたクラスを使用できることを確認してください。

于 2009-01-02T17:36:33.540 に答える
0

同様のオブジェクトを定義しました。上記のリストへのバインドに関する投稿に従いましたが、バインドが機能している間、コントローラーのアクション パラメーターでバインド ホワイトリストまたはブラックリストを使用できませんでした。モデルは IList です

于 2009-01-02T19:32:08.097 に答える