gpt4 book ai didi

asp.net-mvc - MVC Razor - 如何向自身提交表单

转载 作者:行者123 更新时间:2023-12-02 03:47:20 26 4
gpt4 key购买 nike

我是第一次使用 MVC 和 Razor,希望这是一个非常简单的问题。我的网站上有两个页面。第一页(页面 A)上有一个非常小的表格,其中有一个电子邮件地址的输入。当用户输入他们的电子邮件地址并单击“提交”时,他们将使用 HttpPost 发送到页面 B,如下所示:

@using (Html.BeginForm("NewsletterSignup","Common", FormMethod.Post))
{
<p>
<input type="text" class="text" value="Enter your email address" id="email" name="email" />
<input type="submit" class="submit" value="Sign Up" />
</p>
}

页面 B 上有一个主表单,允许用户输入姓名和手机号码。主窗体的 Controller 如下所示:

//newsletter signup page
public ActionResult NewsletterSignup()
{
var model = new NewsletterSignupModel();

return View(model);
}

[HttpPost, ActionName("NewsletterSignup")]
public ActionResult NewsletterSignupSend(NewsletterSignupModel model)
{
if (ModelState.IsValid)
{
//register the user here
}

return View(model);
}

在主表单上,我有一个验证摘要和每个字段的验证。问题是我的 Controller 声明 NewsletterSignupSend 操作只能使用 HttpPost 执行。因为当用户到达页面 B 时,页面 A 上的表单使用 HttpPost,因此验证已经运行 - 即在用户提交页面 b 上的表单之前。

我知道我在这里缺少一个基础知识 - 有人可以引导我走向正确的方向吗?

提前致谢铝

更新:为了解决这个问题,我做了以下操作。

表格 A 使用以下方式呈现:

@Html.Action("MiniNewsletterSignup")

表单 A 有一个 Controller 方法:

//mini newsletter view
public ActionResult MiniNewsletterSignup()
{
var model = new MiniNewsletterSignupModel();

return View(model);
}

View 的内容是:

@model Nop.Web.Models.Common.MiniNewsletterSignupModel
@using (Html.BeginForm("NewsletterSignup", "Common"))
{
<p>
<input type="text" class="text" value="Enter your email address" id="email" name="email" />
<input type="submit" class="submit" value="Sign Up" />
</p>
}

这将使用 HttpPost 将表单提交到页面 B。

页面 B 有 2 个 Controller 方法:

//newsletter signup page
public ActionResult NewsletterSignup()
{
var model = new NewsletterSignupModel();

if (Request["email"] != null)
model.Email = Request["email"];

return View(model);
}

还有:

[HttpPost, **WhenRequestContainsKey("FullName")**]
public ActionResult NewsletterSignup(NewsletterSignupModel model)
{
if (ModelState.IsValid)
{
//process here
}

return View(model);
}

您会注意到我添加了在 http://softwaredevelopmentsolutions.blogspot.co.uk/2011/06/aspnet-mvc-3-partial-form-validation-on.html 找到的选择器 WhenRequestContainsKey 。这意味着仅当请求中存在名为 FullName 的字段时才会调用此代码,该字段在我们的网站上仅存在于页面 B 上。

这似乎按照我想要的方式工作,但我不确定为什么 - 例如为什么这会停止验证发生,直到表单被发布回页面 B - 方法中没有任何调用验证方法的内容? ??

我的实现方式有什么问题吗?

谢谢铝

最佳答案

我认为您错过了发布操作 - 如果您尝试遵循 GET-POST-Redirect 模式,您应该避免这些问题(即每个帖子都应该重定向到 GET 操作):

FirstAction()
{
return View();
}

[HttpPost]
FirstAction()
{
//Save email address
return Redirect("NewsletterSignup","Common");
}

你的第一个表单变成:

@using (Html.BeginForm())
{
<p>
<input type="text" class="text" value="Enter your email address" id="email" name="email" />
<input type="submit" class="submit" value="Sign Up" />
</p>
}

关于asp.net-mvc - MVC Razor - 如何向自身提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888066/

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