[英]Use two view models in one view in ASP.NET Core MVC
我想创建一个包含 2 个 forms 的页面,例如同时具有注册和登录 forms 的页面。但是在 ASP.NET Core 中,我只能为一种形式使用一个 model。 我搜索了那个,我知道我可以使用视图数据或视图包来制作视图 model 以进行登录和注册 model,但我怀疑这种方式是否正确。
这是正确的吗?
然后我收到警告
将 null 文字或可能的 null 值转换为不可空类型
我该如何解决?
理想情况下,您应该有不同的登录和注册页面,您可以在此处查看一些示例,我绝对建议您在按照您的描述实施更改之前做更多的研究,但如果您仍然想 go该选项,而不是一种方法可能是创建一个视图 model,它将同时具有登录和注册属性。 与其使用 ViewData 或 ViewBag,不如直接使用视图 model 来填充视图数据。
// Example get action result
[HttpGet]
public IActionResult Login(string returnUrl = "") {
var model = new LoginViewModel { ReturnUrl = returnUrl };
return View(model);
}
// Example post action result
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model) {
if (ModelState.IsValid) {
var result = await _signManager.PasswordSignInAsync(model.Username,
model.Password, model.RememberMe,false);
if (result.Succeeded) {
if (!string.IsNullOrEmpty(model.ReturnUrl) && Url.IsLocalUrl(model.ReturnUrl)) {
return Redirect(model.ReturnUrl);
} else {
return RedirectToAction("Index", "Home");
}
}
}
ModelState.AddModelError("","Invalid login attempt");
return View(model);
}
// Example view
@model LoginViewModel
@{
ViewBag.Title = "Login";
}
<h2>Login</h2>
<form method = "post" asp-controller = "Account" asp-action = "Login"
asp-route-returnurl = "@Model.ReturnUrl">
<div asp-validation-summary = "ValidationSummary.ModelOnly"></div>
<div>
<label asp-for = "Username"></label>
<input asp-for = "Username" />
<span asp-validation-for = "Username"></span>
</div>
<div>
<label asp-for = "Password"></label>
<input asp-for = "Password" />
<span asp-validation-for = "Password"></span>
</div>
<div>
<label asp-for = "RememberMe"></label>
<input asp-for = "RememberMe" />
<span asp-validation-for = "RememberMe"></span>
</div>
<input type = "submit" value = "Login" />
</form>
您可以使用一个 model 来查看。 您可以将 model 与代表每种形式的两个复数 object 组合起来。
您可以有两个局部视图 SignIn 和 SignUp。 然后用两个部分视图组成一个父页面。 父级仍然有一个视图 model 像上面一样,但是你可以 scope 部分视图到他们模型的根(SignInModel,SignUpModel)而不是从父级嵌套(SignInModel.Username)
您可以尝试检查您的 .csproj 文件是否包含<Nullable>enable</Nullable>
。如果是,请尝试将其删除。 <Nullable>enable</Nullable>
将可为空的注释上下文和可为空的警告上下文设置为启用。您可以参考文档。
如果.csproj 文件不包含<Nullable>enable</Nullable>
,您可以尝试使用<Nullable>disable</Nullable>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.