我有一个登录页面,似乎登录信息没有绑定到我的模型
@using (Html.BeginForm("LogOn", "Account"))
{
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName, new { style = " width:200px" })
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password, new { style = " width:200px" })
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="editor-label">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
<p>
<input type="submit" value="Log On" />
</p>
</fieldset>
</div>
}
...
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
Log(new Exception(string.Format("model username : {0}, password : {1}, request[username] {2} , request[password] : {3}", model.UserName, model.Password, Request["UserName"], Request["Password"])));
try
{...
模型信息为空,即使在firebug中我可以看到表单已发布
这只发生在我的prod服务器上,在本地工作正常
偶尔会有效,让你登录
答案 0 :(得分:1)
可能string returnUrl
混淆了粘合剂,我认为在你的实例中你需要使用绑定前缀,通常作为模型名称,但它可以是任何字符串,所以你的表单将使用绑定元素名称来呈现
<input type='text' name='your_prefix[RememberMe]' id="your_prefix_RememberMe" />
...
以后你可以通过添加你的动作(方法)参数BindAttribute来获取它,如下所示
[HttpPost]
public ActionResult LogOn([Bind(Prefix = "your_prefix")] LogOnModel model, string returnUrl){
...
}