我已经在账户的索引 View 中定义了关于输入标签的自定义名称。名称是 iptloginPassWord
和 iptloginPassWord
。但是,在 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)
用户名文本框的 id
和 name
属性将自动设置为 UserName
,这就是 的值>model.UserName
在 Controller post方法中与用户名文本框的值相同。
我不确定为什么要将用户名文本框的 id
和 name
属性更改为 iptloginUserName
,但是如果删除此语法中的 id
和 name
属性
@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/