2

「個人用」モデルと「ビジネス用」モデルをカプセル化する ViewModel クラスがあります。私の問題は、両方のモデルに「Email」というプロパティがあり、モデル バインディングが 2 つを区別できないことです。

この問題を解決するために使用されていることを読みました[Bind(Prefix = ...が、これを達成する方法に関する簡潔な例を見ることができませんでした。

public class BusinessFormViewModel
{
    public Business Business { get; set; }
    public ContactPerson ContactPerson { get; set; }

    public BusinessFromView(Business business, ContactPerson contactPerson)
    {
        Business = business;
        ContactPerson = contactPerson;
    }
}

Bind Prefix を使用してこれを修正するにはどうすればよいですか?

4

1 に答える 1

1

投稿されるフォーム要素の名前に接頭辞が含まれていれば、バインドは適切に行われると思います。これは、テンプレート化されたヘルパー (つまり、EditorFor) がコントロールをレンダリングする方法であり、ネストされたビューモデルは適切にバインドされます。たとえば、あなたの場合、ビューには次のようなフォーム要素があります。

...
<input type="text" name="Business.Email" value="<%=this.Model.Business.Email %>" />
...
<input type="text" name="ContactPerson.Email" value="<%=this.Model.ContactPerson.Email %>" />
...

または、テンプレート化されたヘルパーを使用します (mvc 2):

...
<%= Html.TextBoxFor(m => m.Business.Email) %>
...
<%= Html.TextBoxFor(m => m.ContactPerson.Email) %>
...

また、コントローラーは次のように BusinessFormViewModel をパラメーターとして単純に受け取ります。

public BusinessFromView(BusinessFormViewModel businessForm)
{
    Business = businessForm.Business;
    ContactPerson = businessForm.ContactPerson;
}
于 2010-04-16T16:06:48.290 に答える