我有2个ViewModels - User和Reminder。
public class UserViewModel
{
[Required]
[Display(Name = "Your name")]
public string Name { get; set; }
[Display(Name = "Your reminders")]
public IEnumerable<ReminderViewModel> Reminders { get; set; }
}
public class ReminderViewModel
{
[Required]
[Display(Name = "Time")]
public TimeSpan Time { get; set; }
[Required]
[Display(Name = "Frequency of repair")]
public string Frequency { get; set; }
}
我的添加视图:
@using (Html.BeginForm("Add", "Test"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@ViewBag.Status
<ul style="list-style: none;">
<li>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
</li>
???????????? // Reminders
<li>
<input type="submit" value="Add" /></li>
</ul>
}
我的问题是:如何在我的视图中绑定此IEnumerable<ReminderViewModel>
?
我希望实现这样的情况,用户可以在发送点击之前多次提交一些提醒(选择时间和频率)。
我该怎么做?
答案 0 :(得分:0)
首先,您需要将其更改为List<ReminderViewModel>
。为了获得正确的模型绑定,您必须能够使用索引值选择对象。
然后在你看来:
@for (var i = 0; i < Model.Reminders.Count(); i++)
{
@Html.LabelFor(m => m.Reminders[i].Time)
@Html.TextBoxFor(m => m.Reminders[i].Time)
@Html.ValidationMessageFor(m => m.Reminders[i].Time)
@Html.LabelFor(m => m.Reminders[i].Frequency)
@Html.TextBoxFor(m => m.Reminders[i].Frequency)
@Html.ValidationMessageFor(m => m.Reminders[i].Frequency)
}
如果Reminders
最初为空,则您需要在操作中使用一个或多个ReminderViewModels
对其进行初始化:
var model = new UserViewModel {
Reminders = new List<ReminderViewModel> {
new ReminderViewModel()
}
}
return View(model);
或者您可以在UserViewModel
的构造函数中执行此操作:
public class UserViewModel
{
public UserViewModel()
{
Reminders = new List<ReminderViewModel> {
new ReminderViewModel();
}
}
}
答案 1 :(得分:0)
您需要执行以下操作:
首先在视图顶部添加对模型的引用,如下所示:
@model UserViewModel
包括您的命名空间。
将您的集合更改为用户列表,以便可以将其编入索引并将模型绑定为:
@for (var i = 0; i < Model.Reminders.Count(); i++)
{
@Html.LabelFor(m => Model.Reminders[i].Frequency)
@Html.TextBoxFor(m => Model.Reminders[i].Frequency)
@Html.ValidationMessageFor(m => Model.Reminders[i].Frequency)
@Html.LabelFor(m => Model.Reminders[i].Time)
@Html.TextBoxFor(m => Model.Reminders[i].Time)
@Html.ValidationMessageFor(m => Model.Reminders[i].Time)
}
这在您的模型中:
[Display(Name = "Your reminders")]
public List<ReminderViewModel> Reminders { get; set; }
您还需要更改“开始”表单,将其设置为发布如下:
@using (Html.BeginForm("Add", "Test", FormMethod.Post))
最后,您需要实现这样的帖子,将模型作为参数:
[HttpPost]
public ActionResult Add(UserViewModel model)
{
// Do processing here
return View(model);
}