2014-12-28 3 views
0

Не знаю, какая часть не так. Я успешно отобразил список флажков внутри представления, но когда он возвращается к контроллеру, модель CheckBoxViewModel возвращает null. ASP.NET MVCView Model null при обратном вызове checkbox to controller

public class CheckBoxViewModel { 
    public List<CheckBoxList> CheckBoxLists {get; set;} 
} 

public class CheckBoxList{ 
    public int CheckBoxId {get; set;} 
    public string CheckBoxDescription { get; set;} 
    public bool CheckBoxState {get; set;} 
} 

@model CheckBoxViewModel 

foreach(var item in Model.CheckBoxLists) { 
    @Html.CheckBoxFor(model => model.CheckBoxState, new { id = @model.CheckBoxId }): 
    @Html.DisplayFor(model => model.CheckBoxDescription); 
} 


[HttpPost] 
public ActionResult EditCheckBox(int userId, CheckBoxViewModel model) { 
} 
+0

Как выглядит ваша 'форма? – beautifulcoder

ответ

2

Здесь идет полное решение -

я использовал свои же ViewModels -

public class CheckBoxViewModel 
{ 
    public List<CheckBoxList> CheckBoxLists { get; set; } 
} 

public class CheckBoxList 
{ 
    public int CheckBoxId { get; set; } 
    public string CheckBoxDescription { get; set; } 
    public bool CheckBoxState { get; set; } 
} 

затем я создал на GET действий с некоторой выборки данных -

public ActionResult AddQuestion() 
{ 
    CheckBoxViewModel m = new CheckBoxViewModel(); 
    m.CheckBoxLists = new List<CheckBoxList>(); 
    m.CheckBoxLists.Add(new CheckBoxList() { CheckBoxDescription = "Hi1", CheckBoxId = 1, CheckBoxState = true}); 
    m.CheckBoxLists.Add(new CheckBoxList() { CheckBoxDescription = "Hi2", CheckBoxId = 2, CheckBoxState = true }); 
    m.CheckBoxLists.Add(new CheckBoxList() { CheckBoxDescription = "Hi3", CheckBoxId = 3, CheckBoxState = true }); 
    return View(m); 
} 

Соответствие GET Просмотр -

@model WebApplication1.Controllers.CheckBoxViewModel 

@{ 
    ViewBag.Title = "AddQuestion"; 
} 

<h2>AddQuestion</h2> 

@using (Html.BeginForm("EditCheckBox", "Home")) 
{ 
    for (int i = 0; i < Model.CheckBoxLists.Count; i++) 
    { 
     @Html.CheckBox(
      String.Format("CheckBoxLists[{0}].CheckBoxState", i.ToString()), 
      Model.CheckBoxLists[i].CheckBoxState, 
      new { id = Model.CheckBoxLists[i].CheckBoxId }) 
     @Html.Label(Model.CheckBoxLists[i].CheckBoxDescription) 

     @Html.Hidden(String.Format("CheckBoxLists[{0}].CheckBoxDescription", i.ToString()), Model.CheckBoxLists[i].CheckBoxDescription) 
     @Html.Hidden(String.Format("CheckBoxLists[{0}].CheckBoxId", i.ToString()), Model.CheckBoxLists[i].CheckBoxId) 
    } 

    <input type="submit" value="Click" /> 
} 

Тогда наконец POST Action -

[HttpPost] 
public ActionResult EditCheckBox(int? userId, CheckBoxViewModel model) 
{ 
    return null; 
} 

Вот вид страницы -

enter image description here

Когда я побежал код и нажать на кнопку, я получаю модель как показано ниже -

enter image description here

Смежные вопросы