asp-对于未绑定到 ViewModel 的输入
asp-for inputs not binding to ViewModel
我有一个使用 asp-for
属性的简单表单。
@using System.Threading.Tasks
@using MyApp.Controllers
@using MyApp.Models.Login
@model MyApp.Models.Login.LoginModel
<form asp-controller="Login" asp-action="Login" asp-route-returnUrl="@ViewBag.ReturnUrl" method="post" class="form-horizontal" role="form">
<div class="form-group">
<label class="col-md-2 control-label">UserName</label>
<div class="col-md-6">
<input asp-for="Username" class="form-control"/>
<span asp-validation-for="Username" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Password</label>
<div class="col-md-6">
<input asp-for="Password" type="password" class="form-control"/>
<span asp-validation-for="Password" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-1">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
<div class="col-md-offset-2 col-md-3">
<a href="/ForgotPassword" class="pull-right">Forgot password?</a>
</div>
</div>
</form>
我的控制器有一个接受 LoginModel 的操作,但是当我单击提交时属性为空。
[AllowAnonymous]
[HttpPost("/Login")]
public async Task<IActionResult> Login(LoginModel lm, string returnUrl)
{
//lm.Username and lm.Password are null
//...
}
这是登录模型:
public class LoginModel
{
[Required(ErrorMessage = "Username is required", AllowEmptyStrings = false)]
public string Username { get; set; }
[Required(ErrorMessage = "Password is required", AllowEmptyStrings = false)]
public string Password { get; set; }
}
我正在使用 ASP.NET Core 1.0 RTM。这是我的 project.json:
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"dependencies": {
"EspritWeb.Services": "1.0.0-*",
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
"Microsoft.AspNetCore.Authorization": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Hosting": "1.0.0",
"Microsoft.AspNetCore.Hosting.Abstractions": "1.0.0",
"Microsoft.AspNetCore.Http.Extensions": "1.0.0",
"Microsoft.AspNetCore.Localization": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Routing": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.AspNetCore.Session": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Caching.SqlServer": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0"
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
}
}
},
"runtimes": {
"win10-x64": {}
}
知道我为什么会出现这种行为吗?谢谢!
确保您在 Views/Shared 文件夹中有一个 _ViewImports.cshtml,并确保在该文件中注册了 taghelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
我有一个使用 asp-for
属性的简单表单。
@using System.Threading.Tasks
@using MyApp.Controllers
@using MyApp.Models.Login
@model MyApp.Models.Login.LoginModel
<form asp-controller="Login" asp-action="Login" asp-route-returnUrl="@ViewBag.ReturnUrl" method="post" class="form-horizontal" role="form">
<div class="form-group">
<label class="col-md-2 control-label">UserName</label>
<div class="col-md-6">
<input asp-for="Username" class="form-control"/>
<span asp-validation-for="Username" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Password</label>
<div class="col-md-6">
<input asp-for="Password" type="password" class="form-control"/>
<span asp-validation-for="Password" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-1">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
<div class="col-md-offset-2 col-md-3">
<a href="/ForgotPassword" class="pull-right">Forgot password?</a>
</div>
</div>
</form>
我的控制器有一个接受 LoginModel 的操作,但是当我单击提交时属性为空。
[AllowAnonymous]
[HttpPost("/Login")]
public async Task<IActionResult> Login(LoginModel lm, string returnUrl)
{
//lm.Username and lm.Password are null
//...
}
这是登录模型:
public class LoginModel
{
[Required(ErrorMessage = "Username is required", AllowEmptyStrings = false)]
public string Username { get; set; }
[Required(ErrorMessage = "Password is required", AllowEmptyStrings = false)]
public string Password { get; set; }
}
我正在使用 ASP.NET Core 1.0 RTM。这是我的 project.json:
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"dependencies": {
"EspritWeb.Services": "1.0.0-*",
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
"Microsoft.AspNetCore.Authorization": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Hosting": "1.0.0",
"Microsoft.AspNetCore.Hosting.Abstractions": "1.0.0",
"Microsoft.AspNetCore.Http.Extensions": "1.0.0",
"Microsoft.AspNetCore.Localization": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Routing": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.AspNetCore.Session": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Caching.SqlServer": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0"
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
}
}
},
"runtimes": {
"win10-x64": {}
}
知道我为什么会出现这种行为吗?谢谢!
确保您在 Views/Shared 文件夹中有一个 _ViewImports.cshtml,并确保在该文件中注册了 taghelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers