繁体   English   中英

在一个视图中使用两个视图模型 ASP.NET Core MVC

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM