Asp.net mvc 3 MVC编辑器,用于绑定到数组中的类型

Asp.net mvc 3 MVC编辑器,用于绑定到数组中的类型,asp.net-mvc-3,binding,viewmodel,Asp.net Mvc 3,Binding,Viewmodel,我有一个ViewModel,其中包括一个“EmailAddress”对象数组。EmailAddress本身具有“Address”和“IsPrimary”等属性。我的观点是模型分解: public class UserDetailsViewModel { public BUser User { get; set; } public string[] Roles { get; set; } public EmailAddress[] EmailAddresses { get; set;

我有一个ViewModel,其中包括一个“EmailAddress”对象数组。EmailAddress本身具有“Address”和“IsPrimary”等属性。我的观点是模型分解:

public class UserDetailsViewModel {
  public BUser User { get; set; }
  public string[] Roles { get; set; }
  public EmailAddress[] EmailAddresses { get; set; }
}
我正在展示一个非常标准的“用户详细信息”页面。例如,我正在使用
@Html.DisplayFor(model=>model.User.UserName)
@Html.DisplayFor(model=>model.User.Comment)
显示数据。我在页面上还有一个部分,列出了与用户关联的所有EmailAddress对象:

@if(Model.EmailAddresses.Length > 0) {
  foreach (var address in Model.EmailAddresses) {
    <div>
      @Html.DisplayFor(model => address.Address)
    </div>
  }
} else {
  <div class="center">User does not have any email addresses.</div>
}
@if(Model.EmailAddresses.Length>0){
foreach(Model.emailAddresss中的var地址){
@DisplayFor(model=>address.address)
}
}否则{
用户没有任何电子邮件地址。
}
我的问题是,我想在电子邮件地址列表上方显示“添加电子邮件地址”表单。我想我会采取“正常”的方法:

@using(Html.BeginForm(new { id=Model.User.UserName, action="AddUserEmailAddress" })) {    
  <text>Address:</text> @Html.EditorFor(model => ** HERE I AM STUCK **)
  <input type="submit" value="Add Email" class="button" />
}
@使用(Html.BeginForm(新的{id=Model.User.UserName,action=“AddUserEmailAddress”})){
地址:@Html.EditorFor(model=>**我被卡住了**)
}
你可能知道,我被困在这里了。我尝试了
model=>model.EmailAddresses[0]
model=>model.EmailAddresses.FirstOrDefault()
。这两项计划都失败得很惨

我确信我在这件事上完全错了。我甚至想过在EmailAddress类型的ViewModel中添加一个“dummy”属性,这样我就可以在EditorFor中绑定到它,但这似乎是一个非常糟糕的攻击。一定有一些简单的东西我忽略了


我将感谢任何人在这件事上提供的任何帮助。提前谢谢你

您可以使用以下快捷方式:

@Html.TextBox("NewEmail")
在AddUserEmailAddress控制器方法中,您将能够通过以下方式获得发布值:

Request.Form.GetValues("NewEmail")

如前所述,如果您不想失去内置验证,您可以始终在ViewModel中创建另一个属性? 为视图提供一个表单,或者使用jQuery.load(“/Controller/AddEmail/UserID”)动态加载它。加

在ViewModel中,以及在视图中的

@Html.EditorFor(model=>model.NewEmail)

另外,您可以考虑使用强类型结构来为您的电子邮件提供列表,这样可以在特定情况下对数据进行更多的控制。

< P>我对MVC非常陌生,但我已经解决了这个问题,我使用了<代码> @ HTML。
@Html.Partial("path/to/EditorTemplate", new EmailAddress())
我还试着走
电子邮件地址[0]
路线,我深深地记得那一天。
我也不确定这是最好的方法,但它与我的其他代码配合得很好。

我想到了这一点,但随后我没有得到自动模型验证(客户端和服务器端)。
@Html.EditorFor(model=>model.NewEmail)
@Html.Partial("path/to/EditorTemplate", new EmailAddress())