2009-08-18 144 views
3

我有一些复选框,看起来像这样如何检查ASP.NET MVC中的复选框是否已选中?

这是一种形式。所以当它进入我的Action方法时,我只是有一个表单集合变量。现在我试着做

frmSign [“Remember”];

所以我试图将其立即转换为布尔值,但失败了。然后我做的ToString(),我意识到,包含在这个值是

“真,假”

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

+0

你在页面上有两个吗? – 2009-08-18 06:15:51

+0

不,这是我寻找的第一件事。我没有。 我注意到通过萤火虫,但我有这个。不知道这是否正常。 chobo2 2009-08-18 06:45:07

+0

啊。那么,我对MVC一无所知,特别是,所以也许没关系。我认为其他海报的答案更有帮助,所以我会把它留给你。然而,从纯粹的“请求”角度来看,这解释了这两个价值。 – 2009-08-18 06:51:36

回答

9

您可以只需添加一个布尔参数到你的动作:

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

此外,您可以使用RouteValues [“记住”]获得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)用逗号分隔。因此,在单一形式下使用相同名称的不同输入(即使输入是不同类型的:复选框,收音机,文本,隐藏等)也是完全正确的。

+0

雅第一个选项的作品,但我只是不明白为什么它在一个frmCollection拧紧它。这可能是某种错误,或者我做错了什么。我喜欢frmCollection,因为它让事情更容易传递到UpdateModel。我想我可以保留frmCollection并传入一个bool参数。这似乎很奇怪。 – chobo2 2009-08-18 06:49:03

+1

我已经添加了解释。 – 2009-08-18 07:24:35

相关问题