@using (Html.BeginForm("PrintDoorSigns", "TimeTable", FormMethod.Post, new { id = "printDoorSigns" }))
{
<input type="hidden" id="doorSignDate" name="SelectedDate" />
<h3>Door Signs</h3>
<fieldset class="float-left">
<legend>Date</legend>
<div id="signsDate"></div>
</fieldset>
<div id="doorSignsRoomList" class="float-left">
@{Html.RenderAction("DoorSignsForm", new { date = DateTime.Now });}
</div>
<div>
<fieldset>
<legend>Options</legend>
<button id="SelectAllRooms">Select All</button>
<button id="RemoveAllRooms">Remove All</button>
</fieldset>
</div>
}
我有这个表格来呈现这个局部视图:
@model WebUI.ViewModels.CalendarVM.DoorSignsFormVM
<fieldset>
<legend>Rooms</legend>
@{ var htmlListInfo = new HtmlListInfo(HtmlTag.vertical_columns, 3, null, TextLayout.Default, TemplateIsUsed.No);
if (Model.Rooms.Count() > 0)
{
<div id="roomsWithBookings" class="CheckBoxList float-left">
@Html.CheckBoxList("SelectedRooms", model => model.Rooms, entity => entity.Value, entity => entity.Text, model => model.SelectedRooms, htmlListInfo)
</div>
}
}
</fieldset>
控制器操作:
public ActionResult PrintDoorSigns(DateTime SelectedDate, DoorSignsFormVM Model)
当我提交表单时,隐藏的输入“SelectedDate”会被传回,并且包含两个IEnumerable变量的Model变量不为null。其中一个列表是null,我期望它,因为它不应该被传回,我期望填充的SelectedRooms变量是一个计数为0的新列表。
我认为绑定在这个属性上是错误的,但我不明白为什么,任何指针?感谢
编辑:
public PartialViewResult DoorSignsForm(DateTime date)
{
var userID = _bookingService.GetCurrentUser(User.Identity.Name);
var model = new DoorSignsFormVM();
model.Rooms = _sharedService.GetRoomsWithBookings(date, userID.FirstOrDefault().DefSite);
return PartialView("_DoorSigns", model);
}
以下是在表单中呈现的doorsignsform动作。
答案 0 :(得分:2)
正如您所说,ASP.NET MVC无法将复选框值视为DoorSignsFormVM
视图模型的一部分。
鉴于您的SelectedRooms
属性是SelectListItem
的集合,MVC无法识别如何将复选框中的字符串值绑定到此属性。
尝试将名为String []类型的SelectedRoomValues的另一个属性添加到您的viewmodel,并将您的复选框代码更改为
@Html.CheckBoxListFor(model => model.SelectedRoomValues, model => model.Rooms, entity => entity.Value, entity => entity.Text, model => model.SelectedRooms, htmlListInfo)
MVC将知道如何绑定到这个新属性,该属性将填充SelectListItem.Value
值。