让用户从ASP.NET MVC中的开放式字符串列表中选择的最佳方法

时间:2011-09-05 20:35:35

标签: asp.net-mvc

我有一个包含10-25个字符串的动态列表,并希望在ASP.NET MVC应用程序中将它们显示为复选框。最简单的方法是什么?我是否必须创建一个将布尔与字符串配对的ViewModel结构列表?在表单发布后,我想提交已检查的值并在服务器端再次将它们解析为字符串列表。

谢谢!

2 个答案:

答案 0 :(得分:4)

  

我是否必须创建一个将布尔与字符串配对的ViewModel结构列表?

这确实是最好的方式,我建议你:

型号:

public class MyViewModel
{
    public string Label { get; set; }
    public bool IsSelected { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        // Normally that comes from a respotiroy or something
        var model = Enumerable.Range(1, 25).Select(x => new MyViewModel
        {
            Label = "item " + x
        });
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<MyViewModel> model)
    {
        // TODO: process your model. It will contain a list of all items
        // along with their selected values
        return View(model);
    }
}

查看(~/Views/Home/Index.cshtml):

@model IEnumerable<MyViewModel>
@using (Html.BeginForm())
{
    <table>
        <thead>
            <tr>
                <th>Name</th>
                <th>Status</th>
            </tr>
        </thead>
        <tbody>
            @Html.EditorForModel()
        </tbody>
    </table>

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

最后是为模型的每个元素(~/Views/Home/EditorTemplates/MyViewModel.cshtml)呈现的编辑器模板:

@model MyViewModel
<tr>
    <td>
        @Html.LabelFor(x => x.IsSelected, Model.Label)
        @Html.HiddenFor(x => x.Label)
    </td>
    <td>
        @Html.CheckBoxFor(x => x.IsSelected)
    </td>
</tr>

答案 1 :(得分:2)

如果您想获取复选框的值,并且您想要一个强类型视图,那么是。您需要一个具有IEnumerable<ViewModel>的viewmodel,其中ViewModel具有布尔值和字符串配对。

只需确保使用DisplayForModel渲染模型,否则您将无法获得内置集合处理。

编辑: 像往常一样,达林的答案比我的要完整得多。 ;)