C# 使用ViewModel在一个页面上创建两个表单,每个表单绑定了不同的模型

C# 使用ViewModel在一个页面上创建两个表单,每个表单绑定了不同的模型,c#,asp.net-mvc,html,razor,C#,Asp.net Mvc,Html,Razor,好的,我正在尝试使用ViewModel在一个页面上显示绑定到两个不同模型的两个表单 所讨论的表格是登录和注册。我目前正在使用默认的MVC5模板,直到我得到正确的答案 因此,我有一个ViewModel: public sealed class LoginRegisterViewModel { public LoginViewModel LoginViewModel { get; set; } public RegisterViewModel RegisterViewModel {

好的,我正在尝试使用ViewModel在一个页面上显示绑定到两个不同模型的两个表单

所讨论的表格是登录和注册。我目前正在使用默认的MVC5模板,直到我得到正确的答案

因此,我有一个ViewModel:

public sealed class LoginRegisterViewModel
{
    public LoginViewModel LoginViewModel { get; set; }
    public RegisterViewModel RegisterViewModel { get; set; }
}
@Model LoginRegisterViewModel
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div class="row">
        <div class="col-md-8">
            <section id="loginForm">
                @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
                {
                    @Html.AntiForgeryToken()
                    <h4>Use a local account to log in.</h4>
                    <hr />
                    @Html.ValidationSummary(true)
                    <div class="form-group">
                        @Html.LabelFor(m => m.LoginViewModel.UserName, new { @class = "col-md-2 control-label" })
                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.LoginViewModel.UserName, new { @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.LoginViewModel.UserName)
                        </div>
                    </div>
                    <div class="form-group">
                        @Html.LabelFor(m => m.LoginViewModel.Password, new { @class = "col-md-2 control-label" })
                        <div class="col-md-10">
                            @Html.PasswordFor(m => m.LoginViewModel.Password, new { @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.LoginViewModel.Password)
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-offset-2 col-md-10">
                            <div class="checkbox">
                                @Html.CheckBoxFor(m => m.LoginViewModel.RememberMe)
                                @Html.LabelFor(m => m.LoginViewModel.RememberMe)
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-offset-2 col-md-10">
                            <input type="submit" value="Log in" class="btn btn-default" />
                        </div>
                    </div>
                    <p>
                        @Html.ActionLink("Register", "Register") if you don't have a local account.
                    </p>
                }
            </section>
        </div>
        <div class="col-md-4">
            <section id="socialLoginForm">
                @Html.Partial("_ExternalLoginsListPartial", new { Action = "ExternalLogin", ReturnUrl = ViewBag.ReturnUrl })
            </section>
        </div>
    </div>
    <div class="row">
        @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
        {
            @Html.AntiForgeryToken()
            <h4>Create a new account.</h4>
            <hr />
            @Html.ValidationSummary()
            <div class="form-group">
                @Html.LabelFor(m => m.RegisterViewModel.UserName, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.TextBoxFor(m => m.RegisterViewModel.UserName, new { @class = "form-control" })
                </div>
            </div>
            <div class="form-group">
                @Html.LabelFor(m => m.RegisterViewModel.Password, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.PasswordFor(m => m.RegisterViewModel.Password, new { @class = "form-control" })
                </div>
            </div>
            <div class="form-group">
                @Html.LabelFor(m => m.RegisterViewModel.ConfirmPassword, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.PasswordFor(m => m.RegisterViewModel.ConfirmPassword, new { @class = "form-control" })
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" class="btn btn-default" value="Register" />
                </div>
            </div>
        }
        @Html.Partial("_RegisterPartial")
    </div>
</body>
</html>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
页面的HTML/Razor代码如下,它是登录/注册页面中表单的复制/粘贴,Linq更改为访问my ViewModel中每个表单的属性:

public sealed class LoginRegisterViewModel
{
    public LoginViewModel LoginViewModel { get; set; }
    public RegisterViewModel RegisterViewModel { get; set; }
}
@Model LoginRegisterViewModel
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div class="row">
        <div class="col-md-8">
            <section id="loginForm">
                @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
                {
                    @Html.AntiForgeryToken()
                    <h4>Use a local account to log in.</h4>
                    <hr />
                    @Html.ValidationSummary(true)
                    <div class="form-group">
                        @Html.LabelFor(m => m.LoginViewModel.UserName, new { @class = "col-md-2 control-label" })
                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.LoginViewModel.UserName, new { @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.LoginViewModel.UserName)
                        </div>
                    </div>
                    <div class="form-group">
                        @Html.LabelFor(m => m.LoginViewModel.Password, new { @class = "col-md-2 control-label" })
                        <div class="col-md-10">
                            @Html.PasswordFor(m => m.LoginViewModel.Password, new { @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.LoginViewModel.Password)
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-offset-2 col-md-10">
                            <div class="checkbox">
                                @Html.CheckBoxFor(m => m.LoginViewModel.RememberMe)
                                @Html.LabelFor(m => m.LoginViewModel.RememberMe)
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-offset-2 col-md-10">
                            <input type="submit" value="Log in" class="btn btn-default" />
                        </div>
                    </div>
                    <p>
                        @Html.ActionLink("Register", "Register") if you don't have a local account.
                    </p>
                }
            </section>
        </div>
        <div class="col-md-4">
            <section id="socialLoginForm">
                @Html.Partial("_ExternalLoginsListPartial", new { Action = "ExternalLogin", ReturnUrl = ViewBag.ReturnUrl })
            </section>
        </div>
    </div>
    <div class="row">
        @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
        {
            @Html.AntiForgeryToken()
            <h4>Create a new account.</h4>
            <hr />
            @Html.ValidationSummary()
            <div class="form-group">
                @Html.LabelFor(m => m.RegisterViewModel.UserName, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.TextBoxFor(m => m.RegisterViewModel.UserName, new { @class = "form-control" })
                </div>
            </div>
            <div class="form-group">
                @Html.LabelFor(m => m.RegisterViewModel.Password, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.PasswordFor(m => m.RegisterViewModel.Password, new { @class = "form-control" })
                </div>
            </div>
            <div class="form-group">
                @Html.LabelFor(m => m.RegisterViewModel.ConfirmPassword, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.PasswordFor(m => m.RegisterViewModel.ConfirmPassword, new { @class = "form-control" })
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" class="btn btn-default" value="Register" />
                </div>
            </div>
        }
        @Html.Partial("_RegisterPartial")
    </div>
</body>
</html>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Visual Studio为我提供零错误和零警告


我不明白为什么,因为我觉得我做的每件事都是正确的。有人能帮我吗?

当您尝试在动态对象上使用lambda表达式时,会出现此错误。这不是指定视图模型类型的方式:

@Model LoginRegisterViewModel
您应该这样做:

@model LoginRegisterViewModel