单击提交按钮mvc 3后如何填充具有List 属性的ViewModel?
我想使用viewModel制作一周中的一天复选框。 View上的一切正常,但是,如果我单击“提交”以保存更改, weeklySchedule
我的weeklySchedule
方法中的weeklySchedule
为null。
为什么weeklySchedule
null? 如何将选定的复选框值发送到我的HttPost
操作? 任何建议都会有帮助。
模型:
public class Settings { public class WeeklySetting { public string DisplayName { get; set; } public string Value { get; set; } public bool IsChecked { get; set; } } }
查看型号:
public class ViewModels { public class Weekly { public List<Settings.WeeklySetting> Settings { get; set; } } } public ActionResult CreateWeekly() { var model = new ViewModels.Weekly { Settings = new[] { new Settings.WeeklySetting{ DisplayName="Monday", Value="MON", IsChecked=false}, new Settings.WeeklySetting{ DisplayName="Tuesday", Value="TUE", IsChecked=false}, new Settings.WeeklySetting{ DisplayName="Wednesday", Value="WED", IsChecked=false}, new Settings.WeeklySetting{ DisplayName="Thursday", Value="THU", IsChecked=false}, new Settings.WeeklySetting{ DisplayName="Friday", Value="FRI", IsChecked=false}, new Settings.WeeklySetting{ DisplayName="Saturday", Value="SAT", IsChecked=false}, new Settings.WeeklySetting{ DisplayName="Sunday", Value="SUN", IsChecked=false}, }.ToList() }; return View(model); } [HttpPost] public ActionResult CreateWeekly(string submitButton, ViewModels.Weekly weeklySchedule) { //Do something return View("CreateWeekly", weeklySchedule); }
视图:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
CreateWeekly
<div> <%foreach (var item in Model.Settings) {%> <%:Html.CheckBoxFor(q=>item.IsChecked) %> <%:Html.LabelFor(q=>item.IsChecked,item.DisplayName) %> <%:Html.HiddenFor(q=>item.Value) %> <% } %> </div> <br /> <input value="GenerateForWeekly" name="submitButton" type="submit" /> <%} %>
当您在视图中开始使用foreach(){}循环时,模型绑定不能很好地工作。 如果你使用EditorTemplate进行WeeklySetting,你会发现它工作得更好,因为它会为你排序所有索引。
例如(这是MVC3 Razor视图语法)
(1)为WeeklySetting创建一个编辑器模板:
@model Settings.WeeklySetting @Html.CheckBoxFor(m => m.IsChecked) @Html.LabelFor(m => m.IsChecked,Model.DisplayName) @Html.HiddenFor(m => m.DisplayName) @Html.HiddenFor(m => m.Value)
(2)使用EditorFor(无foreach)在视图中渲染:
@using (Html.BeginForm()) { @Html.EditorFor(m => m.Settings)
}
如果你使用for
循环而不是foreach
它应该工作。 如下所示: http : //haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx