C# 使用Tuple传递多个模型

C# 使用Tuple传递多个模型,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个视图,包括登录和注册表单 LoginAndRegister.cshtml文件: @model Models.RegisterViewModel @using (Html.BeginForm("Register", "Account", FormMethod.Post)) { @Html.AntiForgeryToken() @Html.ValidationSummary(false) // Form Register here } <div>

我有一个视图,包括登录和注册表单

LoginAndRegister.cshtml文件:

@model Models.RegisterViewModel

@using (Html.BeginForm("Register", "Account", FormMethod.Post))
{
     @Html.AntiForgeryToken()
     @Html.ValidationSummary(false)

    // Form Register here

}
<div>Or if you already have an account then login:</div>
@Html.RenderAction("Login")
@模型元组
@使用(Html.BeginForm(“Login”、“Account”、FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(false)
//在此处登录表单
}
@使用(Html.BeginForm(“Register”、“Account”、FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(false)
//请在这里登记
}
AccountController文件:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register([Bind(Prefix = "Item2")] RegisterViewModel model)
    {
         if (ModelState.IsValid)
         {
            // enter code here     
         }

         // If we got this far, something failed, redisplay form
         var tupleModel = new Tuple<LoginViewModel, RegisterViewModel>(null, model);
         return View("LoginAndRegister", tupleModel);
         }
    }

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login([Bind(Prefix = "Item1")] LoginViewModel model, string returnUrl)
    {
         var tupleModel = new Tuple<LoginViewModel, RegisterViewModel>(model, null);

         if (!ModelState.IsValid)
         {
               return View("LoginAndRegister", tupleModel);
         }

     }
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务


感谢您的友好帮助

登录和注册是两种不同的模式。您可以在asp.net和html帮助程序中使用元组。使用元组只会让事情变得一团糟

您可能想要的是这样的:

Register.cshtml文件:

@model Models.RegisterViewModel

@using (Html.BeginForm("Register", "Account", FormMethod.Post))
{
     @Html.AntiForgeryToken()
     @Html.ValidationSummary(false)

    // Form Register here

}
<div>Or if you already have an account then login:</div>
@Html.RenderAction("Login")

这将在register视图中呈现login视图,您也可以通过另一种方式进行。虽然我个人只是提供一个链接给用户,让他们重定向到登录页面,而不是使用renderaction。

登录和注册是两种不同的模式。您可以在asp.net和html帮助程序中使用元组。使用元组只会让事情变得一团糟

您可能想要的是这样的:

Register.cshtml文件:

@model Models.RegisterViewModel

@using (Html.BeginForm("Register", "Account", FormMethod.Post))
{
     @Html.AntiForgeryToken()
     @Html.ValidationSummary(false)

    // Form Register here

}
<div>Or if you already have an account then login:</div>
@Html.RenderAction("Login")

这将在register视图中呈现login视图,您也可以通过另一种方式进行。虽然我个人只是提供一个链接给用户,让他们重定向到登录页面,而不是使用renderaction。

似乎你在试图通过模型绑定器硬塞一些东西。为什么不制作一个包含所有所需信息的模型并将其传递进来呢?是的,要么制作一个包含所有属性的大型ViewModel,要么制作一个包含LoginViewModel和RegisterViewModelSems的新ViewModel,就像您试图通过模型绑定器硬塞进一些东西一样。为什么不制作一个包含您需要的所有信息的模型,并将其传递进来呢?是的,制作一个包含所有属性的大型ViewModel,或者制作一个包含LoginViewModel和RegisterViewModel的新ViewModel。我将尝试您的建议。谢谢你的好意,我会试试你的建议。谢谢你的帮助