-1

我正在使用Asp.Net身份邏輯模塊進行身份驗證過程。我在一個視圖中使用this主題進行登錄和註冊以及外部登錄。在一個剃鬚刀視圖中的兩種強類型局部視圖

這裏是包含社會登錄,註冊和登錄諧音

@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的和註冊是強類型的局部views.Problem是,當我試圖與亙古不變的用戶登錄我Login.cshtml視圖存在返回的模式,這裏是行動

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); 
    } 

它返回以下錯誤 傳遞到字典的模型產品類型「Helping.ViewModels.LoginViewModel」的,但這種字典需要類型的模型項目「 Helping.ViewModels.RegisterViewModel」。

我註冊視圖預計RegisterViewModel和我locallogin的預計LoginViewModel

@using Helping.ViewModels 
    @model LoginViewModel 

@model HelpingHands.ViewModels.RegisterViewModel 

如何同時提供一個視圖模型需要幫助嗎?

+0

您還沒有提供足夠的信息(您甚至沒有指出您所顯示的視圖中的模型是什麼),但錯誤信息是自我解釋的。最好的猜測是'@ Html.Partial(「Register」)'預計一個模型是'RegisterViewModel' –

+0

參見編輯答案 –

+0

然後它需要是@@ Html.Partial(「Register」,new RegisterViewModel())' - 如果你沒有指定要傳遞給partial的模型,它會傳遞當前的模型,即「LoginViewModel」(因此是錯誤)。但是,爲什麼你會在「登錄」表單的同一頁上有「註冊」表單? 「註冊」操作是一次性的 - 一旦用戶註冊了,他們再也不需要它了,所以你只需通過渲染不必要的額外html來降級你的應用程序(並且弄亂用戶) –

回答

1

您需要將您的LoginViewModel和RegisterViewModel組合到一個模型(ViewModel)中。 如..

public class LoginRegisterModel 
{ 
    public LoginViewModel LoginModel {get;set;} 
    public RegisterViewModel RegisterModel {get;set;} 
} 

然後你可以這個視圖模型傳遞到您的看法..

@model Helping.ViewModels.LoginRegisterModel 

它說這種觀點將使用類LoginRegisterModel作爲模型.. 而對於視圖內您可以使用兩個部分觀點..

Html.Partial("LocalLogin", Model.LoginModel)  
Html.Partial("Register", Model.RegisterModel) 

你得到的錯誤是因爲你沒有傳遞任何模型,您的註冊視圖和默認日傳遞給您的主視圖的e模型將轉到部分註冊視圖的調用。

**我在手機上,原諒我格式不好。如果任何人都可以格式化代碼部分,非常感謝**

相關問題