2016-02-05 62 views
0

* .cshtml网页发送复选框状态(选中与否)通过隐藏字段

@{ 
     var companyLoginFormViewModel = TempData["CompanyLoginFormViewModel"] as CompanyLoginFormViewModel; 
    }  

    <form class="login-form" action="@Url.Action("Login")" name="companyLoginForm" method="post"> 

     <input type="hidden" name="rememberMe" value="@companyLoginFormViewModel.LoginViewModel.RememberMe" /> 

     <button type="submit" class="btn btn-success uppercase">@L("LogIn")</button> 

    </form> 

注:此值(@companyLoginFormViewModel.LoginViewModel.RememberMe)总是truefalse

虚拟机

public class CompanyLoginFormViewModel 
{ 
    public LoginViewModel LoginViewModel { get; set; } 
} 

public class LoginViewModel 
{ 
    public bool RememberMe { get; set; } 
} 

操作方法:

[HttpPost] 
public virtual async Task<JsonResult> Login(LoginViewModel loginModel) 
{ 

    if (!ModelState.IsValid) //here it shows validation error 
    { 
     throw new UserFriendlyException(L("FormIsNotValidMessage")); 
    } 

} 

问:当我通过truefalse通过隐伏场,它总是说The RememberMe field is required.验证错误的服务器上side.But该属性是not a required场?你能告诉我为什么会发生这种情况吗?谢谢。

+0

为什么你不使用强类型助手来生成你的看法。为什么你使用'ViewData'而不是将模型传递给视图(并且使用'@model CompanyLoginFormViewModel'?'bool'类型是必需的字段 - 它必须是'true'或'false'并且永远不会是'null'。唯一的解释是该值不是真的假。检查你生成的html(虽然这将通过生成你正确地查看正确的方式解决) –

+0

并测试 - 只是注释掉隐藏输入 –

+0

@StephenMuecke是的,它产生像这样的'。那么这个平均值是'null'吗?但是模型的上面的属性是'false'no.So怎么能 – Sampath

回答

0

你可以在你的隐藏字段中添加class="ignore",并把这个在你的JavaScript代码在客户端忽略:

$.validator.setDefaults({ 
    ignore: ".ignore" 
}); 

服务器端:

@Html.Hiddenfor(model => model.rememberMe, 
       new Dictionary<string, object> { { "data-val", false }}) 

你使用MVC,请使用它的设施:

@model CompanyLoginFormViewModel 
@{ 

} 

@using (Html.BeginForm("Your Action","your controller",FormMethod.Post)) 
{ 

    @Html.Hiddenfor(model => model.rememberMe, 
       new Dictionary<string, object> { { "data-val", false } }) 

    <button type="submit" class="btn btn-success uppercase">@L("LogIn")</button> 

} 
+0

这与它无关。它只适用于客户端验证,OP甚至不使用任何客户端验证(并且默认情况下忽略隐藏的字段,因此即使OP是,这也不是必需的。 –

相关问题