在一个剃刀视图中有两种强烈类型的局部视图

时间:2015-08-28 20:20:04

标签: asp.net-mvc asp.net-mvc-4 asp.net-identity partial-views asp.net-mvc-partialview

我正在使用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

如何为两个模型提供一个视图需要帮助?

1 个答案:

答案 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视图的调用。

**我在移动设备上,请原谅我的格式错误。如果有人可以格式化代码部分,我非常赞赏**