-1

Я использую логический модуль идентификации 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 и регистр являются строго типизированными частичное views.Problem является то, что, когда я пытаюсь Войти с пользователем, что оленья кожа существует, то он возвращает модель, здесь действие

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

см. Edit answer –

+0

Тогда ему нужно будет' @ Html.Partial ("Register", new RegisterViewModel()) ' - если вы не укажете модель для перехода к частичной, она передаст текущую модель, которая является 'LoginViewModel' (отсюда и ошибка). Но почему у вас будет форма «Регистрация» на той же странице, что и форма «Войти»? Действие «Регистрация» - это один раз - когда пользователь зарегистрировался, он больше никогда не понадобится, поэтому вы просто унизите свое приложение (и запутаете пользователя), предоставив ненужный дополнительный html –

ответ

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) 

Ошибка, возникающая из-за того, что вы не передаете какую-либо модель в свой реестр и по умолчанию e, переданная вашему основному виду, переносится на вызов частичного просмотра.

** Я м на мобильном телефоне, простите меня за плохое форматирование. И если кто-то может отформатировать секцию кода, это будет очень полезно **