我正在尝试实现 this answer suggests但没有将显示名称存储在我的模型代码中,所以我相信这是一个单独的问题。
我有一个 MVC View
<%@ Page Language="C#" MasterPageFile="PathToMaster" Inherits="System.Web.Mvc.ViewPage<ModelData>" %>
和模型:
public class ModelData {
public bool Option1 { get; set; }
}
我有一个带有 HTML 标记的 .aspx 文件,用于包含复选框的表单:
<label for="MyCheckbox">Your choice</label>
<%= Html.CheckBoxFor(Model=>Model.Option1, new { id="Option1", @class="checkbox", onchange="return myValidation();", name="MyCheckbox", value="Option one" } ) %>
编译后会生成以下 HTML:
<label for="MyCheckbox">Your choice</label>
<input class="checkbox" id="Option1" name="Option1" onchange="return myValidation();" type="checkbox" value="Option one" /><input name="Option1" type="hidden" value="false" />
每当我选中复选框并提交表单时, Controller 操作
class MyController : Controller {
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult RequestStuff( ModelData data )
{
}
}
接收数据
,其中Option1
为false
。
我做错了什么?如何使复选框映射到模型成员?
最佳答案
既然你说更改辅助表达式中的别名并没有解决问题,我就花时间准备了 MVC2 测试项目,如下所示:
MyModel.cs:
namespace TestAppMVC2.Models
{
public class MyModel
{
public bool Option1 { get; set; }
}
}
Controller 的操作:
public ActionResult MyAction()
{
var viewModel = new MyModel();
return View(viewModel);
}
[HttpPost]
public ActionResult MyAction(MyModel viewModel)
{
bool option = viewModel.Option1;
return View();
}
View (MyAction.aspx):
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<TestAppMVC2.Models.MyModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
MyAction
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>MyAction</h2>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Option1) %>
</div>
<div class="editor-field">
<%: Html.CheckBoxFor(model => model.Option1) %>
<%: Html.ValidationMessageFor(model => model.Option1) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
看起来像这样:
选中复选框后的结果:
顺便说一句, View 是通过为 MyModel 类添加 View -> 强类型 View 而完全生成的(嗯,几乎完全,我将 TextBoxFor
更改为 CheckBoxFor
)和模板:编辑。
所以看起来上面的绑定(bind)应该没问题。尝试一下,然后您就可以在复选框上摆弄自定义选项。 :)
就像我写的in the other answer ,思想本质上是一样的,只是在MVC3中Razor语法看起来更简洁一些。但当谈到差异时,那就是这样了。 :)
关于c# - 为什么我的复选框没有映射到 MVC 模型成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10651030/