我有两个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
的绑定?
答案 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">