【发布时间】:2010-11-21 12:42:35
【问题描述】:
哟
我的网站上有一个注册页面 - 页面顶部是现有用户的登录表单。在主要区域有注册表。
登录是带有@model ViewModels.LoginViewModel 的部分视图
注册也是部分用@model ViewModels.RegViewModel
包含这些部分的主页是带有@model ViewModels.RegPageViewModel的视图
这个视图模型看起来像:
public class RegViewModel
{
public RegisterVm RegisterVm { get; set; }
public LoginVm LoginVm { get; set; }
}
当我将页面的注册部分(它的操作是注册/捕获 - 接收操作需要一个 RegisterVm)提交给它的控制器时,它抱怨传递了错误的视图模型
子视图及其视图模型是怎么回事?是否有处理此问题的标准方法?
我是否应该为此页面设置一个提交 URL,以确定它是登录请求还是注册请求,然后相应地处理帖子?不过这对我来说似乎很乱......
http://monobin.com/__d33cf45a4 - RegisterVm.cs(LoginVm.cs 和这个差不多)
http://monobin.com/__m69132f76 - RegPageVm.cs
Register.cshtml:
@model xxxx.ViewModels.RegPageVm
@{
View.Title = "Register";
Layout = "~/Views/Shared/_BareBones.cshtml";
}
<link rel="stylesheet" href="@Url.Content("~/Public/Css/signup.css")" type="text/css" />
<div id="sign-up-container">
<div id="sign-up-box">
<div id="sign-up-box-left">
<img src="@Url.Content("~/Public/Images/Signup_176x81.png")" />
</div>
<div id="sign-up-box-right">
@Html.Partial("_Register")
</div>
</div>
</div>
<div class="clear">
</div>
_Register.cshtml:
@model xxxx.ViewModels.RegisterVm
@using (Html.BeginForm("Capture", "Register", FormMethod.Post))
{
<table class="sign-up-box-inner">
<tr>
<td class="label-area">
@Html.LabelFor(x => x.Email)
</td>
<td class="field-area">
@Html.TextBoxFor(x => x.Email, new { @class = "login-input", title = "Enter Name" })
</td>
</tr>
<tr>
<td class="label-area">
@Html.LabelFor(x => x.Password)
</td>
<td class="field-area">
@Html.PasswordFor(x => x.Password, new { @class = "login-input", title = "Enter Name" })
</td>
</tr>
<tr>
<td class="label-area">
@Html.LabelFor(x => x.UserName)
</td>
<td class="field-area">
@Html.TextBoxFor(x => x.UserName, new { @class = "login-input", title = "Enter Name" })
</td>
</tr>
<tr>
<td colspan="2">
<input type="image" src="../../Public/Images/Submit_150x47.png" class="submit-button" />
</td>
</tr>
</table>
@Html.AntiForgeryToken()
}
最后是 RegisterController.cs:
public class RegisterController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult Capture(RegisterVm registerVm)
{
if (!ModelState.IsValid)
{
return View("index", new RegPageVm()
{
LoginVm = new LoginVm(),
RegisterVm = registerVm
});
}
return RedirectToAction("index", "Event");
}
}
w://
【问题讨论】:
-
我们可以从视图中看到一些代码吗?
-
不应该是@Html.Partial("_Register", Model.RegisterVm) 吗?
标签: asp.net-mvc viewmodel razor