postback url不能正常工作但是在测试中

时间:2012-07-19 09:12:47

标签: c# asp.net postbackurl

我有一个显示gridview的搜索页面。 gridview中的项是超链接,它们将url字符串创建回同一页面 - index.aspx

我已经检查了index.asp是否存在查询字符串并处理它就好了。

我遇到的问题是当用户想要输入新的搜索时,这是一个表单提交。但是,回发后仍然包含前一个url查询字符串 - 因此我的部分代码处理请求而不是搜索。

环顾四周,我发现了PostBackURL:

  <asp:Button ID="btn_Search" runat="server" Text="Search" Cssclass="form_btn" OnClick="btn_Search_Click" PostBackUrl="index.aspx" />&nbsp;

在测试中,这就成功了。表单提交到index.aspx而不是说index.aspx?Var1 = 1&amp; Var2 = 2

但是,当我发布到实际网站时,这不起作用。我仍然会收到回复的网址字符串。

asp为按钮和javascript代码输出的代码是相同的。

我对asp很新,但我很困惑,在VS2010中运行调试并在网络服务器上运行时,行为会有所不同。

-

好一些进一步的调查。我正在运行卡西尼但是......我的表格上有两个按钮 - 一个是另一个清楚的搜索。

两个按钮都生成相同类型的html:

<input type="submit" name="ctl00$MainContent$btn_Search" value="Search" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$btn_Search&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Index.aspx&quot;, false, false))" id="MainContent_btn_Search" class="form_btn" />

<input type="submit" name="ctl00$MainContent$btn_Clear" value="Clear" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$btn_Clear&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Index.aspx&quot;, false, false))" id="MainContent_btn_Clear" class="form_btn" />

上面唯一的区别是它们将在服务器上调用的名称,值和函数--btn_clear或btn_Search。

“清除”按钮与实时网站上的postbackurl一起使用;搜索按钮没有。

此外,一旦页面被提供,是否由页面决定它接下来发布数据的位置?所以如果页面说我要去这里,那就是它的发展方向。我的清除按钮说没有url查询字符串转到index.aspx,它可以工作。

这让我感到很困惑 - 如果清除按钮在现场网站上不起作用,我会认为它与卡西尼号有关,或者在开发中它是一台PC vs live有pc&amp;服务器。另外,如果是发布下一步该命令的浏览器,这怎么可能是一个cassini / IIS问题呢?

如果我想进一步研究这个问题,我可能需要使用wireshark或类似工具来查看当我按下搜索或清除时实际离开浏览器窗口的内容。


好的测试项目完成了。我已经验证了这段代码在调试中的作用。直到周一我才能测试到IIS的实时部署。

page1 aspx文件:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="page1.aspx.cs" Inherits="page1" %>

<!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">
<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="False">
    <Columns>
    <asp:HyperLinkField DataNavigateUrlFields="intVal" 
            DataNavigateUrlFormatString="page1.aspx?Var={0}" DataTextField="intVal" 
            HeaderText="URL String" />
    </Columns>
</asp:GridView>
<br />
<br />
Search &nbsp;<asp:TextBox runat="server" ID="searchtext"></asp:TextBox><br />

<asp:Button ID="btn_Search" runat="server" Text="Search" OnClick="btn_Search_Click" PostBackUrl="page1.aspx" />&nbsp;
<asp:Button ID="btn_Clear" runat="server" Text="Clear" OnClick="btn_Clear_Click" PostBackUrl="page1.aspx" /><br />
Result:<br /><br />
<asp:Label runat="server" ID="result">Initial Load</asp:Label>

</form>
</body>
</html>

第1页.aspx.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class page1 : System.Web.UI.Page
{

public class MyItem 
{
    public int intVal {get; set;}
    public string stringVal {get; set;}
}

List<MyItem> ListMyItem = new List<MyItem>();

protected void Page_Load(object sender, EventArgs e)
{
    BuildList();


    result.Text = "Page Load: " + Request.Url;
}

protected void BuildList()
{
    MyItem MI = new MyItem();
    MI.intVal = 1;
    MI.stringVal = "111";

    ListMyItem.Add(MI);

    MI = new MyItem();
    MI.intVal = 2;
    MI.stringVal = "222";

    ListMyItem.Add(MI);

    gridview1.DataSource = ListMyItem;
    gridview1.DataBind();

}

protected void btn_Clear_Click(object sender, EventArgs e)
{
    result.Text = "Clear, URL: " + Request.Url + " Search= " + searchtext.Text;
}
protected void btn_Search_Click(object sender, EventArgs e)
{
    result.Text = "Search, URL: " + Request.Url + " Search= " + searchtext.Text;
}
}

1 个答案:

答案 0 :(得分:0)

它的一个或另一个 如果您不需要在后面的代码中执行任何操作,请删除OnClick="btn_Search_Click" 如果您不想被重定向,请删除PostBackUrl="index.aspx"

你当然也可以使用OnClick="btn_Search_Click"然后在代码后面重定向到index.aspx