通常登陆的时候,会有一个选择框“记住我”,以便用户下次登陆的时候无需再次输入账号信息
MVC3中,可以绑定一个model的一个bool字段,由系统自动处理,然而,大多时候,我们更喜欢自己写标签,例如:
<input id="persist_box" data-val="true" value="true" name="chk_persist" type="checkbox" class="uiInputLabelCheckbox" />
那么在controller中:
public ActionResult Login(FormCollection c)
{
....
bool cookiePersist = c["chk_persist"] == "false";
......
}
当checkbox处于勾选状态时,此值可以取到;相反,则这个地方会有异常抛出,因为在FormCollection中不存在chk_persist。为啥mvc3不把这个放到里面呢?没研究不清楚。
回头看看Model绑定的情况,发现在生成的html中
除了这段:<input id="persist_box" data-val="true" value="true" name="chk_persist" type="checkbox" class="uiInputLabelCheckbox" />
后面又多了了一个隐藏的input,并且和上面的一个name相同
<input name="chk_persist" type="hidden" value="false" />
我们也如此办,添加隐藏的input,此种情况下:
1. 如果checkbox选择了,那么提交后,在controller中
public ActionResult Login(FormCollection c)
{
....
string cookiePersist = c["chk_persist"] ;
......
cookiePersist = "true,false"
2 ,如果checkbox未被选中提交,则只有隐藏的那个input内容被提交
那么cookiePersist = “false”
结论:通过cookiePersist的值的不同,可以判断checkbox的状态是否为选中