【问题标题】:MVC5 checkbox not cheked even "value = true" [closed]即使“value = true”也没有检查 MVC5 复选框 [关闭]
【发布时间】:2014-10-21 13:56:42
【问题描述】:

我用的是MVC 5,发现checkbox有很多问题。

这是我的代码:

<input type="checkbox" name="Item 3" value="true">

但现在甚至没有任何复选框= 选中。那么用户怎么知道哪个已经被选中?

另一个问题是,如果我检查了它,值仍然没有改变.....那么如何确保结果是正确的呢?

更新 1: 抱歉这个愚蠢的问题,我很早就搜索答案,但每个人都建议使用 value="true"。看起来把它改成 checked="checked" 就好了。

【问题讨论】:

  • 您如何管理名为Item 3 的属性?无论如何,checkbox 类型的&lt;input&gt; 不会使用value 属性而是使用checked 属性进行检查。无论您在value 中输入什么内容,您的任何一个复选框都不会被选中。
  • 您是否尝试设置input 元素的checked 属性?究竟是什么不工作?不清楚你在问什么,或者这个 HTML 代码与 ASP.NET 有什么关系。
  • 复选框的值在选中时不会改变。选中该框会告诉浏览器在提交表单时提交名称/值对。在过去,我们曾经包含与复选框同名的隐藏字段,因此我们至少会在服务器端获得名称和默认值。
  • 如果您在浏览器开发工具中使用 HTML 检查器查看 HTML,您将看不到任何变化。 HTML 只是服务器发送给浏览器的内容。交互式更改在 DOM 中进行跟踪,但不会反映在 HTML 中。
  • 你为什么不使用 Html.CheckBox() 或 Html.CheckBoxFor()?

标签: c# html asp.net .net asp.net-mvc


【解决方案1】:

这只是 HTML,试试下面...

<input type="checkbox" name="Item 3" checked>

或者,正如所指出的......

<input type="checkbox" name="Item 3" checked="checked"> 

Fiddle

【讨论】:

  • checked="checked" 也是可以接受的。我相信对 XHTML 更严格。
【解决方案2】:

如果您想处理复选框并始终在服务器端获取值(不仅在选中时) 也考虑这个解决方案:

<input class="checkbox" type="checkbox" value="true" name="Item 3" @(condition ? "checked" : "")/>
<input type="hidden" value="false" name="Item 3"/>

value="true"表示表单提交时会发送这个值到服务器

【讨论】:

    【解决方案3】:

    在 MVC 中,最好的做法是通过创建模型、将其发送到视图并使用 razor 语法来实际呈现表单来处理表单。

    您的模型或视图模型:(这将在您的模型文件夹中)

    namespace Project.Models
    {
        public class FormViewModel
        {
            public bool Item3 { get; set; }
        }
    }
    

    然后在您的控制器中,您可以决定是真还是假:

    public ActionResult Index()
    {
        FormViewModel newForm = new FormViewModel() { Item3 = true; } //This will mark it as checked
        return View(newForm);
    }
    

    然后,您只需在视图中使用从控制器发送的 模型

    @model Project.Models.FormViewModel
    

    这允许您使用该模型/视图模型中的变量创建表单

    @using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post))
    {
        @Html.LabelFor(m => m.Item3)
        @Html.CheckBoxFor(m => m.Item3)
        <input type="submit" value="Save" />
    }
    

    然后您只需使用控制器来捕获模型、处理变量并使用它做您想做的事情。

    以这种方式处理数据会让您更容易。此链接提供了一个不错的教程,介绍如何使用 MVC Razor 在表单中创建模型、视频和处理用户输入:Getting Started with Razor View Engine in MVC 3

    【讨论】:

    • 谢谢,但是因为有很多复选框。所以我想也许我需要使用 FormCollection 让参数对我来说更容易。
    • @qakmak 这种方法实际上非常适合有很多变量。您可以遍历所有变量并显示复选框,而无需手动显示它们。它使它更易于维护。如果您愿意,我可以向您展示如何做到这一点的示例?另外,感谢 David Martin 的编辑,完全错过了。
    • @qakmak,在这里遵循 Termato 的建议。使用FormCollection 获取复选框值是有问题的,因为未选中的复选框不会回发。你的 useng MVC 所以要利用它的特性,特别是强类型的帮助器和模型绑定。
    • 谢谢大家,但是Item3实际上是一个动态生成的名字(来自一个菜单id),真实的名字是:“Item” + MenuModel.Id。所以我认为 FormCollection 会比这更好。然后我知道哪个菜单丢失了,然后删除,检查哪个菜单,然后将菜单id与角色绑定。
    • @Termato 和 Stephen Muecke 给出的建议是合理的,对于您的动态名称,您可以创建一个 ViewModel 来满足您的需求。
    【解决方案4】:

    复选框有一个布尔属性“已选中”,必须存在该属性才能将复选框设置为选中状态。如果您希望它不被选中,则根本不要放置该属性。此外,设置“checked=true”、“checked=false”、“checked=whatever”,始终返回为选中状态。

    <input type="checkbox" name="one" checked> Checked
    <p>
    <input type="checkbox" name="two"> Unchecked

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2011-12-02
      相关资源
      最近更新 更多