为什么我的复选框没有映射到 MVC 模型成员?

2024-04-02

我正在尝试实现什么这个答案表明 https://stackoverflow.com/a/10649724/57428但没有将显示名称存储在我的模型代码中,所以我相信这是一个单独的问题。

我有 MVC 视图

<%@ 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" />

每当我选中复选框并提交表单时,控制器操作

class MyController : Controller {
   [AcceptVerbs(HttpVerbs.Post)]
   public ActionResult RequestStuff( ModelData data )
   {
   }
}

收到data where Option1 is false.

我究竟做错了什么?如何使复选框映射到模型成员?


既然你说更改辅助表达式中的别名并没有解决问题,我就花时间准备了 MVC2 测试项目,如下所示:

MyModel.cs:

namespace TestAppMVC2.Models
{
    public class MyModel
    {
       public bool Option1 { get; set; }
    }
}

控制器的动作:

    public ActionResult MyAction()
    {
        var viewModel = new MyModel();
        return View(viewModel);
    }


    [HttpPost]
    public ActionResult MyAction(MyModel viewModel)
    {
        bool option = viewModel.Option1;
        return 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>

看起来像这样:

And the result after checking the checkbox: Breakpoint stop

顺便说一句,视图是完全生成的(嗯,几乎完全,我改变了TextBoxFor to CheckBoxFor)通过为 MyModel 类和模板添加视图 -> 强类型视图:编辑。

所以看起来上面的绑定应该没问题。尝试一下,然后您就可以在复选框上摆弄自定义选项。 :)

就像我写的在另一个答案中 https://stackoverflow.com/questions/10649454/how-do-i-map-checkboxes-onto-mvc-model-members/10649724#10649724,思想本质上是一样的,只是在MVC3中Razor语法看起来更简洁一些。但当谈到差异时,那就是这样了。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的复选框没有映射到 MVC 模型成员? 的相关文章

随机推荐