【发布时间】:2011-11-25 01:42:40
【问题描述】:
我有一个 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>
}
我的问题是我想在电子邮件地址列表上方显示一个“添加电子邮件地址”表单。我想我会因此采取“正常”的方法:
@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" />
}
如您所知,我被困在这里。我试过model => Model.EmailAddresses[0] 和model => Model.EmailAddresses.FirstOrDefault()。这两个都失败了。
我确信我做错了。我什至想过在我的 ViewModel 类型的 EmailAddress 中添加一个“虚拟”属性,以便我可以在我的 EditorFor 中绑定到它——但这似乎是一个非常糟糕的 hack。必须有一些简单的东西我忽略了!
如果有人能就此事提供任何帮助,我将不胜感激。提前谢谢!
【问题讨论】:
标签: asp.net-mvc-3 binding viewmodel