我正在使用Asp.Net身份逻辑模块进行身份验证过程。我在一个视图中使用this主题进行登录和注册以及外部登录。
这是我的Login.cshtml视图,其中包含社交登录,注册和登录部分
@using Helping.ViewModels
@{
ViewBag.Title = "Log in";
}
<div class="container">
<div class="row">
<br />
<br />
<div class="col-lg-4">
<div>
<section id="socialLoginForm">
@Html.Partial("_ExternalLoginsListPartial", new ExternalLoginListViewModel { Action = "ExternalLogin", ReturnUrl = ViewBag.ReturnUrl })
</section>
</div>
</div>
<div class="col-lg-4">
<h2><b>Sign Up</b></h2>
<hr />
@Html.Partial("Register")
</div>
<div class="col-lg-4">
<h2><b>Log In</b></h2>
<hr />
@Html.Partial("LocalLogin")
</div>
</div>
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
LocalLogin和Register是强类型的部分视图。问题是,当我尝试使用不存在的用户登录时,它返回模型,这里是动作
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
string callbackUrl = await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account-Resend");
ViewBag.errorMessage = "You must have a confirmed email to log on.";
return View("Error");
}
else
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
返回以下错误 传递到字典中的模型项的类型是&#39; Helping.ViewModels.LoginViewModel&#39;,但是这个字典需要一个类型为&#39; Helping.ViewModels.RegisterViewModel&#39;的模型项。
My Register视图期望RegisterViewModel和My LocalLogin需要LoginViewModel
@using Helping.ViewModels
@model LoginViewModel
@model HelpingHands.ViewModels.RegisterViewModel
如何为两个模型提供一个视图需要帮助?
答案 0 :(得分:1)
您需要将LoginViewModel和RegisterViewModel组合到一个模型(ViewModel)中。 像..
public class LoginRegisterModel
{
public LoginViewModel LoginModel {get;set;}
public RegisterViewModel RegisterModel {get;set;}
}
然后您可以将此viewModel传递给您的视图..
@model Helping.ViewModels.LoginRegisterModel
其中说这个视图将使用类LoginRegisterModel作为模型.. 在您的两个部分视图的视图中,您可以使用..
Html.Partial("LocalLogin", Model.LoginModel)
Html.Partial("Register", Model.RegisterModel)
你得到的错误是因为你没有将任何模型传递给你的Register视图,默认情况下传递给你主视图的模型被转移到部分Register视图的调用。
**我在移动设备上,请原谅我的格式错误。如果有人可以格式化代码部分,我非常赞赏**