asp.net mvc 3模型绑定器没有绑定

时间:2011-12-06 16:49:35

标签: asp.net asp.net-mvc-3 model-binding modelbinders

我有一个登录页面,似乎登录信息没有绑定到我的模型

@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服务器上,在本地工作正常

偶尔会有效,让你登录

1 个答案:

答案 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){
  ...
}