【问题标题】:@Html.CheckBoxFor wont change the value of a variable@Html.CheckBoxFor 不会改变变量的值
【发布时间】:2013-11-06 16:09:31
【问题描述】:

情况是这样,我有一个 ClassA,其中包含 ClassB 对象的列表。 ClassB 有 3 个变量,一个 int、一个 bool 和一个字符串。当我列出它时,我试图更改 bool 变量(在视图中使用 foreach)。列表部分运行顺利(我可以选择要检查的复选框),但用户选择的复选框的值不会被记住。

这是一个视图模型:

@model ClassA
...

@using (Html.BeginForm("Upload", "Registration", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
       ...
      <p>Your name: @Html.TextBoxFor(x => x.FirstName) </p>
      <p>Adress:             @Html.TextBoxFor(x => x.Adress)</p> 

      foreach (ClassB check in Model.ClassBlist)
      {

      <p>@check.Name:@Html.CheckBoxFor(x=>check.attributeChecked,check.itemID)</p> 

        }
   ``...
     }

【问题讨论】:

    标签: asp.net asp.net-mvc-4


    【解决方案1】:

    试试这样:

    for (var i = 0; i < Model.ClassBlist.Count; i++)
    {
        <p>
           @Html.DisplayFor(x => x.ClassBlist[i].Name)
           :
           @Html.CheckBoxFor(
               x => x.ClassBlist[i].attributeChecked, 
               Model.ClassBlist[i].itemID
           )
        </p> 
    }
    

    这一次 CheckBoxFor 助手将为相应的输入字段生成正确的名称,以便在您提交表单时默认模型绑定器能够正确绑定它。

    【讨论】:

    • 还是不行。当我按下提交按钮时,classA 中的所有其他项目都会很好地返回给控制器,但列表仍然是空的。还有其他建议吗?
    • 您的 POST 控制器操作是否采用与您视图中使用的模型相同的模型?还是直接将列表作为参数?
    • 是的,它的型号相同。我现在解决了这个问题(由于我的错误),并且由于您上面编写的代码,它可以完美运行。但我有另一个问题要问你:Model.ClassBlist[i].itemID 不返回它的值(@Html.DisplayFor(x => x.ClassBlist[i].Name) 也不返回),而是我不得不使用 @hidden 元素返回他们的值,但我让它工作。我的问题是为什么它不能按照你建议的方式工作,因为它应该!
    • 如果要将值发送到服务器,则需要使用隐藏字段。 Html.DisplayFor 助手只在 HTML 中显示一个简单的字符串,当表单提交时,它永远不会到达您的服务器。
    • 但是,@Html.CheckBoxFor( x => x.ClassBlist[i].attributeChecked, Model.ClassBlist[i].itemID ) 不应该返回 itemID 的值吗?谢谢你的耐心:)
    猜你喜欢
    • 1970-01-01
    • 2022-11-27
    • 2023-03-21
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多