asp.net-mvc – MVC Razor – 如何向自己提交表单
我第一次使用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上有一个主要表单,允许用户输入他们的姓名和手机号码.主窗体的控制器如下所示: //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); } 在主窗体上,我有一个Validationsummary和每个字段的验证.问题是我的控制器声明只能使用HttpPost执行NewsletterSignupSend操作.因为页面A上的表单在用户到达页面B时使用HttpPost,所以验证已经运行 – 即在用户在页面b上提交表单之前. 我知道我在这里错过了一个基本的东西 – 有人能引导我朝着正确的方向前进吗? 提前致谢 更新:要解决此问题,我已完成以下操作. 表格A使用以下方式呈现: @Html.Action("MiniNewsletterSignup") 表格A有一个控制器方法: //mini newsletter view public ActionResult MiniNewsletterSignup() { var model = new MiniNewsletterSignupModel(); return View(model); } 并且视图的内容是: @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种控制器方法: //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找到的Selector WhenRequestContainsKey.这意味着只有在Request中有一个名为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> } (编辑:十堰站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何刷新#include文件 – 它们在IIS7 / ASP.NET上进行缓存
- asp.net-mvc – 在Asp.Net MVC中使用千位分隔符的十进制值
- asp.net-mvc – 尝试将asp.net web发布到Azure时,Visual St
- asp.net – 注册.NET 4.5 IIS 10 Windows 10
- asp.net-mvc – 使用mvc的主要目的
- asp.net-mvc – ASP.NET MVC检查Controller或Action中的自定
- 来自ASP.NET MVC站点的“无效的JSON原语:alihack”错误
- asp.net – (客户端)禁用提交按钮的最佳方法是什么?
- asp.net – FF和IE不从CSS加载img src
- asp.net-mvc – 有条件地在webgrid中显示图像 – mvc 3
- 有没有办法将内部控件放在ASP.NET自定义控件中?
- asp.net-mvc – 什么时候使用ViewData而不是View
- asp-classic – 哪里可以存储经典ASP的连接字符串
- asp.net – 如何从TableAdapter中检索存储过程返
- 我应该在ASP.NET MVC中构建我的下一个Web应用程序
- asp.net – 请求在IIS工作进程中存在于RequestAc
- asp.net-mvc – 在ASP.NET MVC中添加服务引用4
- asp.net-mvc-3 – RedirectResult Object作为URL
- asp.net-mvc-4 – 如何在Kendo UI Grid中扩展页面
- 只需发布已修改的控制器,模型和ASP.NET MVC项目的