如何在操作中绑定viewmodel子类值?

时间:2016-03-09 19:46:54

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有两个ViewModels

CreateEventViewModel
CreateAccountViewModel

CreateEventViewModel看起来像这样

public class CreateEventViewModel
{
    [Required]
    [Display(Name = "Name")]
    public string Name { get; set; }

    public CreateAccountViewModel CreateAccountViewModel;
}

在视图中我可以使用

@Html.EditorFor(model => model.name)
@Html.EditorFor(model => model.CreateAccountViewModel.Email)

到目前为止一切都很棒,但我如何将值绑定到CreateAccountViewModel.Email

CreateEventViewModel.Name的绑定适用于此设置

public ActionResult Create([Bind(Include = "Name")] CreateEventViewModel eventViewModel){
    ...
}

但是我怎么写来获得CreateEventViewModel.CreateAccountViewModel.Email的绑定?

1 个答案:

答案 0 :(得分:1)

我想你应该提一下设置

public virtual CreateAccountViewModel CreateAccountView {get; set;}

现在,CreateAccountViewModel中的Email属性应该可以在create method

中访问
public ActionResult Create(CreateEventViewModel eventViewModel){
    var email = eventViewModel.CreateAccountView.Email;
}

当我们将Model对象作为参数传递时,ASP.net MVC会自动为您进行模型绑定, ASP.NET MVC模拟来自HTTP世界的所有数据并使用DefaultModelBinder类,该类神奇地将所有这些值的所有类型转换和映射到Model属性。

在Create操作中,我们已经在使用模型绑定。但是为了进行绑定工作,你的html输入标签属性id和name应该与模型属性相同。 例如:<input class="textbox" id="Name" name="Name" type"text">CreateAccountViewModel内的CreateEventViewModel确实使用ModelObject.PropertyName,如下面的输入标记

<input class="textbox" id="CreateAccountView.Email" name="CreateAccountView.Email" type"text">