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);

用Server.Transfer方法就可以了。关于asp.net重定向有下面三个方法

(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 core razor)

如何在 ASP.NET MVC 中通过 Ajax 提交表单?

ASP.net MVC - 视图上的多个表单,每个调用不同的操作,但需要再次显示相同的视图

如何使用 JavaScript 而不是提交按钮发布 ASP.NET MVC Ajax 表单