C# 使用ViewModel在一个页面上创建两个表单,每个表单绑定了不同的模型
好的,我正在尝试使用ViewModel在一个页面上显示绑定到两个不同模型的两个表单 所讨论的表格是登录和注册。我目前正在使用默认的MVC5模板,直到我得到正确的答案 因此,我有一个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 {
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