2011-04-11 120 views
2

嗨,ASP.net MVC和复选框

我知道,它可能使用Html.CheckBoxFor(C => c.MyBool)获取默认的粘结剂正确的值绑定到在模型对象参数一个控制动作(强类型视图)。

如果我需要在母版的表单中添加“rememberme”复选框,这意味着没有强类型可供使用。

都说登录操作采用下面的类

public class LogOnModel 
    { 
     [Required] 
     [DisplayName("User name")] 
     public string UserName { get; set; } 

     [Required] 
     [DataType(DataType.Password)] 
     [DisplayName("Password")] 
     public string Password { get; set; } 

     [DisplayName("Remember me?")] 
     public Boolean RememberMe { get; set; } 
    } 

的目的是获取默认的粘结剂映射到用户名和密码,我们可以只创建一个具有正确的名称(用户名/密码)输入。然而这对于RememberMe属性来说是不可能的。为了得到这个工作,我哈得来的广告的隐藏字段的名称RmemberMe然后设置此输入,像这样一个javascript:

$(document).ready(function() { 

      $('input[id*=chkbRemember]').click(function() { 
       if ($('input[id*=chkbRemember]').attr('checked')) { 
        $('input[id *= RememberMe]').val("True"); 
       } 
       else { 
        $('input[id *= RememberMe]').val("False"); 
       } 
      }); 
     }); 

这会工作,但真的是这样的路吗?

BestRegards

+0

为什么不能命名为“RememberMe”?你使用Html.CheckBox还是只使用'input type =“复选框”'? – dotjoe 2011-04-11 18:34:28

+0

如果我只是将其命名为RememberMe,则不会设置RememberMe属性。我只是使用输入,而不是Html.CheckBox。 Html.Checkbox可能会生成隐藏字段吗? – Banshee 2011-04-11 18:47:37

+0

是的,HtmlHelper CheckBox将生成一个复选框和一个隐藏字段,它们具有相同的名称来处理未选中的/ false值。 – dotjoe 2011-04-11 18:57:06

回答

2

这是一个众所周知的问题,与HTML表单。

如果您有复选框输入,并且它从不被检查,则不会发布该值。

Html.CheckBox & Html.CheckBoxFor呈现一个具有相同名称的额外隐藏元素,以确保某些值总是被发布。我相信Ruby on Rails使用相同的技术(可能还有其他技术)。

还有a short discussion on the Asp.Net forum about this,以及一些previous StackOverflow questions