Я чувствую себя полным идиотом, но по жизни я не могу понять, какого черта я здесь скучаю.
У меня есть следующее:
@section TopPane
{@* @ {Html.Action ("_ OpenIDSignInPartial", "Account");} * @
@ {Html.RenderAction ("_ OpenIDSignInPartial", "Account");}
Войдите с помощью своего сайта mysite..com или зарегистрируйтесь для учетной записи @ {Html.RenderPartial ("_ LoginPartial");} @ {Html.RenderPartial ("_ RegisterPartial");}
}
Как видите, у меня есть 3 PartialПредставления оказываются.Теперь для кода контроллера ----
public class AccountController : Controller
{
private readonly IAuthenticationService _authenticationService;
OpenIdRelyingParty _openIdRelyingParty = new OpenIdRelyingParty(null);
public AccountController(IAuthenticationService authenticationService)
{
_authenticationService = authenticationService;
}
public ActionResult Index()
{
return View();
}
public ActionResult SignIn()
{
return View();
}
[HttpPost]
public ActionResult SignIn(AccountSignInViewModel accountSignInViewModel)
{
return View();
}
public ActionResult OpenIdSignIn()
{
AccountIndexViewModel accountIndexViewModel = new AccountIndexViewModel();
IAuthenticationResponse authenticationResponse = _openIdRelyingParty.GetResponse();
switch (authenticationResponse.Status)
{
case AuthenticationStatus.Authenticated:
try
{
var claimedIdentifier = authenticationResponse.ClaimedIdentifier.ToString();
_authenticationService.OpenIdSignIn(claimedIdentifier);
}
catch (Exception)
{
// Do something with this man!
throw;
}
break;
case AuthenticationStatus.Canceled:
accountIndexViewModel.openIdSignInViewModel.ErrorMessage = "An Error Message";
break;
}
return View("SignIn",accountIndexViewModel); // ALWAYS an ERROR
}
[HttpPost]
public ActionResult OpenIdSignIn(AccountOpenIdSignInViewModel accountOpenIdSignInViewModel)
{
IAuthenticationResponse authenticationResponse = _openIdRelyingParty.GetResponse();
if (authenticationResponse == null)
{
Identifier identifier;
if (Identifier.TryParse(accountOpenIdSignInViewModel.openid_identifier, out identifier))
{
try
{
IAuthenticationRequest request =
_openIdRelyingParty.CreateRequest(accountOpenIdSignInViewModel.openid_identifier);
return request.RedirectingResponse.AsActionResult();
}
catch (ProtocolException protocolException) // Prolly should add some errors to the model
{
ModelState.AddModelError("openid_identifier","Unable to authenticate");
return View("SignIn");
}
}
}
return View();
}
public ActionResult _OpenIDSignInPartial(AccountOpenIdSignInViewModel accountOpenIdSignInViewModel)
{
return PartialView("_OpenIdSignInPartial");
}
}
Когда я перезапускаю представление из OpenIdSignIn ActionResult (), я получаю следующую ошибку Элемент модели, переданный в словарь, имеет тип 'Web.ViewModels.AccountIndexViewModel', но для этого словаря требуется элемент модели типа' Web.ViewModels.AccountSignInViewModel '.Хорошо, отлично, поэтому я верну AccountSignInViewModel правильно ??Затем я получаю сообщение об ошибке, утверждая, что для этого требуется AccountIndexViewModel ... CATCH 22 здесь.