2014-06-26 1 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 "передается обратно, а переменная Model, содержащая две переменные IEnumerable, не является нулевой. Один из списков - это нуль, который я ожидаю, так как он не должен быть возвращен обратно, а переменная SelectedRooms, которую я ожидаю заполнить, - это новый список со счетом 0.

Я предполагаю, что привязка просто неверна в этом свойстве но я не понимаю, почему, какие-то указатели? Благодаря

EDIT:

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 s, MVC не распознает, как привязать значения строк из флажков к этому свойству.

Попробуйте добавить еще одно свойство с именем SelectedRoomValues ​​типа строки [] к вашему ViewModel и изменить свой CheckBox код для

@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, которая берет лямбду, а не строку? – devduder

+0

You также может изменить свойство 'SelectedRooms' на вашей модели view из коллекции объектов' Room', чтобы быть строковым массивом и посмотреть, работает ли это. – devduder