如何将复选框映射到MVC模型成员?

sha*_*oth 12 .net c# iis asp.net-mvc model

我有一个MVC视图

<%@ Page Language="C#" MasterPageFile="PathToMaster" Inherits="System.Web.Mvc.ViewPage<ModelData>" %>
Run Code Online (Sandbox Code Playgroud)

我有一个带有HTML标记的表单,用于一组复选框:

<label for="MyCheckbox">Your choice</label>
<input type="checkbox" id="Option1" class="checkbox" name="MyCheckbox" value="Option one" />
<label for="Option1">Option one</label><br />
<input type="checkbox" id="Option2" class="checkbox" name="MyCheckbox" value="Option two" />
<label for="Option2">Option two</label><br />
Run Code Online (Sandbox Code Playgroud)

我有一个控制器动作对

class MyController : Controller {
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult RequestStuff( ModelData data )
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

并在提交表单时调用该操作.

如何将复选框映射到成员ModelData(以及我必须添加到哪些成员ModelData),以便在提交表单时data存储有关选中复选框的信息?

Pat*_*iek 10

好的,这个将用于MVC3,但是 - 除了语法更改 - 也应该在MVC2中工作.方法基本相同.

首先,您应该准备一个适当的(视图)模型

public class MyViewModel
{
    [DisplayName("Option 1")]
    public bool Option1 { get; set; }

    [DisplayName("Option 2")]
    public bool Option2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后将此模型传递给您正在显示的视图(控制器):

public ActionResult EditMyForm()
{
    var viewModel = new MyViewModel()
    return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)

与形式:

@model MyViewModel
@using( Html.BeginForm())
{
    @Html.Label("Your choice")

    @Html.LabelFor(model => model.Option1) // here the 'LabelFor' will show you the name you set with DisplayName attribute
    @Html.CheckBoxFor(model => model.Option1)

    @Html.LabelFor(model => model.Option2)
    @Html.CheckBoxFor(model => model.Option2)
    <p>
        <input type="submit" value="Submit"/>
    </p>
}
Run Code Online (Sandbox Code Playgroud)

现在,这里的HTML佣工(所有的CheckBoxFor,LabelFor,EditorFor等),允许绑定到数据模型的属性.

现在请注意,EditorFor当属性属性时,bool也会在视图中为您提供复选框.:)

然后,当您提交给控制器时,它将自动绑定值:

[HttpPost]
public ActionResult EditMyForm(MyViewModel viewModel)
{
    //And here the view model's items will be set to true/false, depending what you checked.
}
Run Code Online (Sandbox Code Playgroud)