如何检查ASP.NET MVC中是否选中了复选框?

时间:2009-08-18 06:13:04

标签: asp.net-mvc

我有一些看起来像这样的复选框

  <%= Html.CheckBox("Remember") %>
  <%= Html.Label("Remember", "Keep me signed in for two weeks.") %>

这是一种形式。因此,当它转到我的Action方法时,我只有一个表单Collection变量。现在我尝试做

frmSign [ “记住”];

所以我试图将其转换为布尔值并失败。然后我做了.toString(),我意识到包含的值是

  

“真,假”

这是正常的吗?为什么这是真的,是假的?它现在是真还是假?

1 个答案:

答案 0 :(得分:9)

您只需在操作中添加一个布尔参数:

public ActionResult LogIn(string username, string password, bool remember)
{
    // You have it
}

此外,您可以使用RouteValues [“Remember”]来获取ValueProviderResult 所以你可以这样做:

public ActionResult LogIn(string username, string password)
{
      bool remember = false;
      ValueProviderResult val;
      if (RouteValues.TryGetValue(key, out val))
          remember = (bool)val.ConvertTo(typeof(bool));
      // Now you have it
}

但出于显而易见的原因,我更喜欢第一种选择。

至于问题:

  

这是正常的吗?为什么这是真的,是假的?什么现在是真是假?

是的,这很正常。 MVC中的复选框帮助程序始终生成值为“False”的隐藏输入。如果未选中复选框,则需要提供False值 为什么呢?
因为根据W3.ORG,如果选中复选框,则仅将值发布到服务器,否则不会(因此您不知道它是True还是False,例如为null)。

因此,如果您选中“true,false”复选框,则可以安全地假设该值为true 如果未选中该复选框,则“false”将出现在服务器上,您可以确定它未​​被选中。

为了澄清更多:用逗号分隔的值(根据W3.ORG)具有相同的名称。因此,在单个表单中使用相同名称的不同输入是完全正确的(即使输入的类型不同:复选框,广播,文本,隐藏等)。