Asp.net core mvc 为什么将表单控件传递给ViewModel在ASP.NET Core 2.0中不起作用?
我构建了一个简单的ASP.NETCore2.0应用程序,并且有一个简单的登录视图。我正在使用ASP.NET核心标识,这意味着我正在使用“IdentityUser”类 当用户点击表单上的“登录”时,我的ASP.NET标记帮助程序指示post请求将点击“帐户”控制器中的“登录”操作 这是我的“登录”操作Asp.net core mvc 为什么将表单控件传递给ViewModel在ASP.NET Core 2.0中不起作用?,asp.net-core-mvc,asp.net-identity,asp.net-core-2.0,Asp.net Core Mvc,Asp.net Identity,Asp.net Core 2.0,我构建了一个简单的ASP.NETCore2.0应用程序,并且有一个简单的登录视图。我正在使用ASP.NET核心标识,这意味着我正在使用“IdentityUser”类 当用户点击表单上的“登录”时,我的ASP.NET标记帮助程序指示post请求将点击“帐户”控制器中的“登录”操作 这是我的“登录”操作 private readonly SignInManager<IdentityUser> _signInManager; private readonly
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;
public AccountController(SignInManager<IdentityUser> signInManager, UserManager<IdentityUser> userManager)
{
_signInManager = signInManager;
_userManager = userManager;
}
[HttpGet]
public IActionResult Login()
{
return View(new LoginViewModel());
}
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel loginViewModel)
{
if (!ModelState.IsValid)
{
return View(loginViewModel);
}
var user = await _userManager.FindByNameAsync(loginViewModel.UserName);
if (user != null)
{
var result = await _signInManager.PasswordSignInAsync(user, loginViewModel.Password, false, false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
}
ModelState.AddModelError("", "User name/password not found");
return View(loginViewModel);
}
private readonly-SignInManager\u-SignInManager;
私有只读用户管理器_UserManager;
公共帐户控制器(SignInManager SignInManager、UserManager UserManager)
{
_signInManager=signInManager;
_userManager=userManager;
}
[HttpGet]
公共IActionResult登录()
{
返回视图(新的LoginViewModel());
}
[HttpPost]
公共异步任务登录(LoginViewModel LoginViewModel)
{
如果(!ModelState.IsValid)
{
返回视图(loginViewModel);
}
var user=await\u userManager.FindByNameAsync(loginViewModel.UserName);
如果(用户!=null)
{
var result=await _signInManager.PasswordSignInAsync(user,loginViewModel.Password,false,false);
if(result.successed)
{
返回重定向到操作(“索引”、“主页”);
}
}
AddModelError(“,“未找到用户名/密码”);
返回视图(loginViewModel);
}
我传递给“Login”操作的对象“loginViewModel”为null,这意味着它在用户提交表单时没有获取表单数据
你知道我在这里遗漏了什么吗,很确定这是件愚蠢的事情吗?你遗漏了输入上的标记帮助程序
<div class="form-group">
<label asp-for="UserName">User Name</label>
<input type="text" class="form-control" placeholder="Username"
asp-for="UserName" /> <!-- You're missing this -->
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
HTML帮助程序
从[Display]
生成占位符文本。这样,您就不需要对视图上的文本进行硬编码
<div class="form-group">
<label asp-for="UserName"></label>
<input type="text" class="form-control" asp-for="UserName"
placeholder="@Html.DisplayNameFor(x => x.UserName)" />
</div>
输入上缺少标记帮助程序
<div class="form-group">
<label asp-for="UserName">User Name</label>
<input type="text" class="form-control" placeholder="Username"
asp-for="UserName" /> <!-- You're missing this -->
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
HTML帮助程序
从[Display]
生成占位符文本。这样,您就不需要对视图上的文本进行硬编码
<div class="form-group">
<label asp-for="UserName"></label>
<input type="text" class="form-control" asp-for="UserName"
placeholder="@Html.DisplayNameFor(x => x.UserName)" />
</div>
您正在为您的输入生成手动html,它们没有
名称
属性,因此在提交表单时不会发布值
更改输入以使用TagHelpers,它将生成正确的html,包括用于客户端验证的name
属性和data val-*
属性
//
//
您正在为输入生成手动html,它们没有名称
属性,因此在提交表单时不会发布值
更改输入以使用TagHelpers,它将生成正确的html,包括用于客户端验证的name
属性和data val-*
属性
//
//
输入没有与模型成员匹配的名称。@Nkosi我使用的是ASP.NET标记帮助程序,例如ASP for=“UserName”表示表单数据将被注入映射此字段的模型。输入没有与模型成员匹配的名称。@Nkosi我使用的是ASP.NET标记帮助程序,例如,asp for=“UserName”表示表单数据将被注入到映射此字段的模型中。谢谢您的详细回答。事实上,这是一个愚蠢的错误,我已经知道了解决办法。另外,感谢您为我解释帮助标签,并为您提供详细的答案。事实上,这是一个愚蠢的错误,我已经知道了解决办法。另外,谢谢你为我解释助手标签
<label asp-for="UserName"></label>
<div class="form-group">
<label asp-for="UserName"></label>
<input type="text" class="form-control" asp-for="UserName"
placeholder="@Html.DisplayNameFor(x => x.UserName)" />
</div>