asp.net如何让不同的按钮将表单提交到不同的页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net如何让不同的按钮将表单提交到不同的页面相关的知识,希望对你有一定的参考价值。
举例:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default10.aspx.cs" Inherits="Default10" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="不弹出" OnClick="Button1_Click" />
<asp:Button ID="Button3" runat="server" Text="弹出S" onclick="Button3_Click" />
</div>
</form>
</body>
</html>
CS:
protected void Button1_Click(object sender, EventArgs e)
Response.Write(this.TextBox1.Text);
protected void Button3_Click(object sender, EventArgs e)
//把表单提交到另外一个页面(Default11.aspx),且此页面要弹出来
Default11.aspx.cs
protected void Page_Load(object sender, EventArgs e)
if (Request.Form["TextBox1"] != null)
string str = Request.Form["TextBox1"].ToString();
Response.Write(str);
(1)Server.Transfer方法:
Server.Transfer("m2.aspx");//页面转向(服务器上执行).
服务器停止解析本页,保存此页转向前的数据后,再使页面转向到m2.aspx,
并将转向前数据加上m2.aspx页结果返回给浏览器.
(2)Server.Execute方法:
Server.Execute("m2.aspx");
服务器保存此页转向前的数据后,使页面转向到m2.aspx执行,
再返回本页继续执行.再将三者结果合并后返回给浏览器.
以上都是服务器端页面转向所以浏览器不出现页更改记录(显示的地址不会改变).
因此,如果用户刷新此页,也许会出现一些其它意外情况.
此类页转向,可完成一些其它功能,比如访问到前一页面中的服务端控件.
(3)Response.Redirect:
当浏览器请求aspx页面时,碰到Redirect(url)方法,
相当于告诉浏览器,你先需访问某页面,于是浏览器再向服务器发送一个到此页面的请求.
重定位是通过浏览器执行的,在服务器和浏览器之间会产生额外的往返过程。
在网络状况不是很好的情况下,两次请求会大大的降低应用程序的反应速度,甚至占用多余的带宽.
总结:
在网络状态较好的情况下,Redirect(url)方法效率最高!!
Server.Transfer方法和Server.Execute方法最灵活!!
Server.Execute方法占用资源最多. 参考技术A <form id="form1" runat="server" target="_blank">
protected void Button3_Click(object sender, EventArgs e)
//把表单提交到另外一个页面(Default11.aspx),且此页面要弹出来
Server.Transfer("Default11.aspx");
这样试一下,要在新窗口打开,你必须想办法设置 form target="_blank", 参考技术B response.redirect("Default11.aspx")
就可以连接到Default11.aspx页面了
在 ASP.net MVC 5 应用程序中单击按钮时使用 JavaScript/jQuery 将用户重定向到页面
【中文标题】在 ASP.net MVC 5 应用程序中单击按钮时使用 JavaScript/jQuery 将用户重定向到页面【英文标题】:Redirect user to a page using JavaScript/jQuery on button click in ASP.net MVC 5 application 【发布时间】:2017-05-28 03:25:37 【问题描述】:我希望用户在提交表单后立即被重定向到不同的页面。我不关心调用控制器操作 httpost 时会发生什么。我只希望用户在单击按钮或提交表单后立即重定向页面。以下是我尝试过的,但它不起作用
cshtml文件sn-p
<script>
$(document).ready(function ()
$('#formSubmitButton').click(function ()
debugger;
// Neither works
window.location.href = "/Home/Index";
window.location.href = "https://www.google.com";
);
);
</script>
家庭控制器
public ActionResult Index()
return View();
实际的 httpost 控制器方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SavePayment(PaymentFormMV data)
return View ("Hello")
我可以看到断点在 JavaScript 代码中被命中。但没有效果。此外,正常的 post 调用按预期进行,SavePayment 方法被调用,因此视图 hello
相应地被调用。为什么我无法在按钮单击时将用户重定向到索引页面。我知道 SavePayment 最终会被调用,但为什么重定向不起作用。我错过了什么吗?
编辑
这就是整个故事。客户正在付款,一些付款超时。当超时没有发生时,“Hello”重定向非常好。所以基本上如果超时发生在 2 分钟内。然后我会在将用户重定向到主页之前设置一个可能是 1.58 分钟的计时器。如果 post 方法返回成功,则“Hello.cshtml”将被调用。
但如果 IIS 服务器即将在 2 分钟后抛出 time out exception
,那么我的 JavaScript 代码将在 IIS 启动之前超时(定时器设置为 1.58)并将用户重定向到主页。我希望最终会发生的 IIS 超时错误不会覆盖用户已安全重定向的主页。请指导我。底线我不希望 IIS 踢出用户。我没有在 JavaScript 代码 sn-p 中添加超时间隔代码,因为正常重定向本身不起作用。
【问题讨论】:
【参考方案1】:因为,当您单击提交按钮时,表单已提交,HttpPost 操作方法将处理已发布的表单数据并返回一个 ViewResult(从“Hello”视图生成的 html 标记)返回。由于表单正在提交,它不会执行您设置window.location.href
值的JS代码。
您应该在成功保存后在您的操作方法中进行重定向,例如 PRG 模式:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SavePayment(PaymentFormMV data)
//do something
return RedirectToAction("Index","Home");
如果您绝对想使用客户端脚本进行重定向,但希望表单被提交和处理(就像一个火忘记时尚),您可以考虑做一个 ajax 表单发布。
$('#formSubmitButton').click(function (e)
e.preventDefault(); // Prevent normal form submit
var _form=$(this).closest("form");
$.post(_form.attr("action"),_form.serialize(),function(res)
// If you want to check the response and then do redirection
// you should do it here. Make sure you return a json response from server then
);
window.location.href = "https://www.google.com";
);
编辑
根据相关编辑
这就是整个故事。客户正在付款和一些付款 正在超时。 “Hello”重定向在以下情况下非常好 超时没有发生。所以基本上如果超时发生在2 分钟。然后我会在 1.58 分钟前设置一个计时器 将用户重定向到主页。如果 post 方法返回成功,则 “Hello.cshtml”将被调用。但以防万一IIS服务器 即将抛出超时异常,这是在 2 分钟后然后我的 JavaScript 代码将在 IIS 退出之前超时(计时器中设置为 1.58) 并将用户重定向到主页。我希望 IIS 时间 最终会发生的错误不会覆盖主页 该用户已被安全重定向。底线我 不希望 IIS 踢出用户。我没有添加超时 JavaScript 代码中的间隔代码 sn -p 因为正常 重定向本身不起作用
我最初的反应是,不要在这样的用户线程上花费 2 分钟时间做任何事情。这不是一个好的用户体验。我不确定你从哪里得到 2 分钟的时间!但我建议你修复需要这么长时间的代码。您应该将其卸载为可能是一个 ajax 调用(参见上面的示例 ajax 代码),如果您没有收到 200 OK 响应(或您的 success
回调),您可以在客户端做一些事情(向用户显示一条消息所以他们可以再试一次)。这样您就可以避免使用本地 JavaScript 计时器。
底线是:修复需要 2 分钟以上的代码!可能有另一种方法可以解决您的问题/用例。
【讨论】:
这是 正确的 方法,但似乎 OP 想要离开页面并让表单发布自行消失。跨度> @nurdyguy:你是对的。 Shyju:你能看到编辑吗 一个小疑问。实际上,我的服务器端控制器调用会发生什么。我的意思是我在 1.58 之后将用户重定向到主页,但 IIS 服务器调用将继续进行,并在 2:00 时退出。那么这在现实世界中是如何运作的。我的意思是用户会看到 IIS 错误还是仍然在主页上? 或者假设没有发生超时,即使付款已经完成,那么用户是否会再次被重定向到 hello.cshtml? index.cshtml 是否会被 hello.cshtml 或 IIS 服务器超时错误页面覆盖。只是想知道?以上是关于asp.net如何让不同的按钮将表单提交到不同的页面的主要内容,如果未能解决你的问题,请参考以下文章
提交到 ASP.NET 页面的 PDF 表单创建返回 HTML 文件
在 ASP.net MVC 5 应用程序中单击按钮时使用 JavaScript/jQuery 将用户重定向到页面
如何在 ASP.NET MVC 中通过 Ajax 提交表单?