c# - View 中的模型无法绑定(bind)到 ASP.NET MVC4 中 Controller 中的操作

标签 c# asp.net-mvc asp.net-mvc-4 razor

我已经在账户的索引 View 中定义了关于输入标签的自定义名称。名称是 iptloginPassWordiptloginPassWord。但是,在 Controller 中,只要单击提交按钮,模型就会为 null

我附上了下面的代码。这是模型绑定(bind)问题吗?你们能帮忙确定这里出了什么问题吗?

查看:

<div class="rl-modal-body">
    <div class="login-model-body-wrap">
        @using (Html.BeginForm("Logon", "Account", FormMethod.Post, new { id = "loginForm" }))
        {
            <div class="rlf-model-group">
                <div class="ipt-container">
                    <div class="ipt-config ipt-UserName"></div>
                    @*h5提供了required属性,Name的N必须为大写*@
                    @*<input id="iptloginUserName" type="text" name="iptloginUserName" value="" placeholder="请输入用户名" class="ipt ipt-login" required="required" />*@
                    @Html.TextBoxFor(model => model.UserName, new { @id = "iptloginUserName", @Name = "iptloginUserName", @placeholder = "请输入用户名", @class = "ipt ipt-login", @required = "required" })
                </div>
                <p class="rl-p"></p>
            </div>
            <div class="rlf-model-group">
                <div class="ipt-container">
                    <div class="ipt-config ipt-Password"></div>
                    @*<input id="iptloginPassWord" type="password" name="iptloginPassWord" value="" placeholder="请输入密码" class="ipt ipt-login ipt-passwordforJS" required="required" />*@
                    @Html.PasswordFor(model => model.Password, new { @id = "iptloginPassWord", @Name = "iptloginPassWord", @placeholder = "请输入密码", @class = "ipt ipt-login ipt-passwordforJS", @required = "required" })
                </div>
                <p class="rl-p"></p>
            </div>
            <div class="rlf-model-group">
                <label for="AutoLogin">
                    <input id="AutoLogin" type="checkbox" checked="checked" />自动登录
                </label>
            </div>
            <div class="rlf-model-group">
                <p class="rl-p"></p>
                <input id="iptloginsubmit" type="submit" name="Button" value="登录" class="btn-red btn-full" />
            </div>
        }
    </div>
</div>


Controller :

public class AccountController : Controller
{
    //
    // GET: /Account/

    [AllowAnonymous]
    public ActionResult Index()
    {
        return View();
    }

    [AllowAnonymous]
    [HttpPost]
    public ActionResult Logon(User model)
    {
        string username = model.UserName;//this will get null 
        string password = model.Password;//this will also get null
        return View(model);
    }
}

最佳答案

当你这样做的时候

@Html.TextBoxFor(model => model.UserName)

用户名文本框的 idname 属性将自动设置为 UserName,这就是 的值>model.UserName 在 Controller post方法中与用户名文本框的值相同。

我不确定为什么要将用户名文本框的 idname 属性更改为 iptloginUserName,但是如果删除此语法中的 idname 属性

@Html.TextBoxFor(model => model.UserName, new { @id = "iptloginUserName", @Name = "iptloginUserName", @placeholder = "请输入用户名", @class = "ipt ipt-login", @required = "required" })

然后改成这个

@Html.TextBoxFor(model => model.UserName, new { @placeholder = "请输入用户名", @class = "ipt ipt-login", @required = "required" })

model.UserName 在您的 Controller post 方法中不会为 null,它将包含在用户名文本框中输入的值。

同样的事情也适用于密码文本框,所以改变这个语法

@Html.PasswordFor(model => model.Password, new { @id = "iptloginPassWord", @Name = "iptloginPassWord", @placeholder = "请输入密码", @class = "ipt ipt-login ipt-passwordforJS", @required = "required" })

对此

@Html.PasswordFor(model => model.Password, new { @placeholder = "请输入密码", @class = "ipt ipt-login ipt-passwordforJS", @required = "required" })

关于c# - View 中的模型无法绑定(bind)到 ASP.NET MVC4 中 Controller 中的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152972/

相关文章:

c# - JSON.NET 序列化日期

asp.net-mvc - 如何在 .NET Core 3.1 中使用 Azure AD Saml2 身份验证进行 SSO

asp.net-mvc - 在 MVC3 或 MVC4 中检查项目构建

asp.net-mvc - Autofac 注入(inject)到使用 RegisterControllers() 加载的 Controller

c# - 在父 View 中显示子项的验证 asp.net mvc 3

c# - 如何抑制 C# 中方法调用的错误?

C# OOPS 说明

c# - ASP.NET 5 Beta 7 (Web Tools 2015 Beta7) - wwwroot/index.html 未提供

asp.net-mvc - ASP MVC3 获取和设置下拉列表项

entity-framework - 部署到 Windows azure 时出现“自创建数据库以来上下文已更改”问题