2014-06-26 174 views
0
@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> 
} 

我有此形式,其呈現此局部視圖:MVC 4模型局部視圖結合

@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。其中一個列表是空的,我期望,因爲它不應該傳回來,我預計將填充的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

您不應該在這裏將DoorSignsFormVM模型傳遞給RenderAction方法Html.RenderAction(「DoorSignsForm」,new {date = DateTime.Now})?您可以發佈DoorSignsForm操作的代碼嗎? – devduder

+0

添加到主要問題,謝謝 – Nathelol

回答

2

就像你說的那樣,ASP.NET MVC不會將複選框值視爲DoorSignsFormVM視圖模型的一部分。

鑑於您的SelectedRooms屬性是SelectListItem的集合,因此MVC無法識別如何將複選框的字符串值綁定到此屬性。

嘗試添加名爲string類型的SelectedRoomValues []到您的視圖模型,並改變你的複選框代碼另一個屬性

@Html.CheckBoxListFor(model => model.SelectedRoomValues, model => model.Rooms, entity => entity.Value, entity => entity.Text, model => model.SelectedRooms, htmlListInfo) 

MVC便會知道如何綁定到這個新屬性,將與SelectListItem.Value填充值。

+0

我試過這個,但是當我將它改爲「DoorSignsFormVM.SelectedRooms」時,它使控制器操作中的對象有兩個空列表,而不是一個空值和一個計數爲0.你不能使用lambda作爲第一個參數,不幸的是,因爲它抱怨它期望一個字符串:( – Nathelol

+0

)你是否嘗試使用@ Html.CheckBoxList的重載,它需要一個lambda而不是一個字符串? – devduder

+0

You也可以將viewmodel上的'SelectedRooms'屬性從'Room'對象的集合中更改爲一個字符串數組,並查看是否有效。 – devduder