asp.net-mvc-3 - ASP.Net MVC 3 检索复选框列表值

标签 asp.net-mvc-3 checkbox viewmodel checkboxlist

我正在开发一个 ASP.Net MVC 3 Web 应用程序,我在从复选框列表中获取值时遇到了一些困难。我已经阅读了有关该领域 Stackoverflow 的大部分问题,但是,我仍然遇到一些问题。

我有一个 View 模型

public class ViewModelCheckBox
{
    public string Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}

另一个使用上述 View 模型的 View 模型
public class ViewModelAssignSubSpeciality
{
    public ListItem Item { get; set; }
    public IList<ViewModelCheckBox> SpecialityList { get; set; }
}

然后在我的 Controller 中
public ActionResult AssignSubSpeciality(int id)
{
        //Get a list of all sub-specialities
        var SpecialityList = _listService.GetListItemsByID(3).ToList();

        //Get a list of sub-specialities for the the passed in id, this is either the id of a speciality or grade
        IList<RelationshipSpecialitySub> assignedSpecialities = _listService.GetAssignedSubSpecialities(id).ToList();

        var checkBoxList = new List<ViewModelCheckBox>();

        foreach (ListItem item in SpecialityList)
        {
            ViewModelCheckBox chkBox = new ViewModelCheckBox { Id = item.listItemID.ToString(), Name = item.description };

            //If sub-speciality exists in assignedSpecialities list, then make checkbox checked
            foreach (var specilaity in assignedSpecialities)
            {
                if (specilaity.subID == item.listItemID)
                {
                    chkBox.Checked = true;
                }
                else
                {
                    chkBox.Checked = false;
                }
            }

            checkBoxList.Add(chkBox);
        }

        ViewModelAssignSubSpeciality viewModel = new ViewModelAssignSubSpeciality();
        viewModel.ListItem = _listService.GetListItemByID(id);
        viewModel.SpecialityList = checkBoxList;

        return View(viewModel);
    }

上面 Controller 中的代码获取所有可能的复选框列表项的列表,然后获取所有先前选择的复选框列表项的列表,并将选中的选项设置为 true。

然后我的 View 看起来像这样,遍历 SpecialityList 并为每个项目创建一个复选框,如果需要,还将其选定值设置为 true。
<fieldset>
<legend>Specialities</legend>

@foreach (var item in Model.SpecialityList)
{
<input type="checkbox" id="@item.Id" name="@item.Name" value="@item.Id" @(item.Checked ? "checked" : "") />
<label for="@item.Id">@item.Name</label><br />
}

<input type="submit" value="Save Changes" class="sepH_b" />                                         

我的 Controller 中的 HttpPost 方法看起来像这样
    public ActionResult AssignSubSpeciality(ViewModelAssignSubSpeciality model)
    {
        //delete all sub-specialities in tbl relationshipSpecialitySub for List
        foreach (ViewModelCheckBox item in model.SpecialityList)
        {
                //_listService.DeleteSubSpecialityFromSpeciality(item.Id);
        }

        return RedirectToAction("ListItems", new { id = model.ListItem.listID });
    }

但是,当我尝试获取选定的复选框时
model.SpecialityList

我们总是为空。我不确定为什么它不包含 ViewModelCheckBox 列表。

谁能帮我解决这个问题?

谢谢你。

最佳答案

我的 View 模型中有一个 Enumerable

public class CheckBoxItem
{
   public string Code { get; set; }
   public bool IsChecked { get; set; }
   public string Label {get;set;}
}

然后我使用编辑器模板在页面上显示它们。
<p class="checkbox" style="display:inline">
<span style="margin-left:5px;">
    @Html.HiddenFor(x => x.Code)           
    @Html.CheckBoxFor(x => x.IsChecked)
</span>
@Html.LabelFor(x => x.IsChecked, Model.Label)
</p>

在 View 中,我使用以下内容在页面上显示它们。
@Html.EditorFor(m => m.MyEnumerableOfCheckBoxItem)

当表单被回发时,模型被正确绑定(bind)。

希望这可以帮助。

关于asp.net-mvc-3 - ASP.Net MVC 3 检索复选框列表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9973977/

相关文章:

c# - ASP.NET 学习路径

jquery - 在 asp.net mvc3 中使用 jquery unobtrusive 显示元素下方的验证消息

WPF 从 Converter 访问 View 模型

wpf - WPF在 View 中更改ViewModel属性

android - 具有多个 ViewModel 的 Activity

c# - ASP.NET MVC3 : Reusable method which returns Database query results

asp.net-mvc - 如何在不对每个 Controller 添加注释的情况下授权一组 Controller ?

c# - 带复选框的 Winform TreeView - 仅更新可见节点

java - 带方形边框的 JCheckBox

javascript - 即使只有一个被选中,jQuery 也会返回所有选中的复选框