gpt4 book ai didi

asp.net-mvc - Asp.net MVC Razor 在一个页面上不止一个表单

转载 作者:行者123 更新时间:2023-12-04 06:40:59 25 4
gpt4 key购买 nike



我的网站上有一个注册页面 - 页面顶部是现有用户的登录表单。在主要区域有注册表。

登录是 @model ViewModels.LoginViewModel 的局部 View
注册也是部分@model ViewModels.RegViewModel
包含这些部分的主页是 @model ViewModels.RegPageViewModel 的 View

这个 View 模型看起来像:

public class RegViewModel
{
public RegisterVm RegisterVm { get; set; }
public LoginVm LoginVm { get; set; }
}

当我将页面的注册部分(它的操作是注册/捕获 - 接收操作需要一个 RegisterVm)提交给它的 Controller 时,它提示被传递了错误的 View 模型

subview 和它们的 View 模型有什么关系?有没有标准的方法来处理这个问题?

我是否应该为这个页面提交一个 URL 来确定它是登录请求还是注册请求,然后相应地处理帖子?不过这对我来说似乎很困惑......

http://monobin.com/__d33cf45a4 - RegisterVm.cs(LoginVm.cs 和这个差不多)

http://monobin.com/__m69132f76 - RegPageVm.cs

注册.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://

最佳答案

您需要确保表单元素(如文本框等)应与 RegisterVM 和 LoginVM 属性具有相同的 id。您的理论是正确的,但我认为您可能在 MVC 的命名约定中犯了错误。

如果您可以共享您的 View 代码 + VM 类,那么我们将能够提供更好的帮助。

编辑:

查看您的代码,我认为您应该将 View 模型传递给您的局部 View 。例如,下面这行相信应该是这样的>
@Html.Partial("_Register", Model.RegisterVm)

关于asp.net-mvc - Asp.net MVC Razor 在一个页面上不止一个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4237864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com