URL обратной ссылки не работает в прямом эфире, но работает в тесте

У меня есть страница поиска, которая показывает сетку. Элементы в сетке - это гиперссылки, которые создают строку 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&Var2=2

Однако, когда я публикую публикацию на живом сайте, это не работает. Я все еще получаю сообщение обратно со строкой URL.

Код, выданный asp для кнопки и кода javascript, идентичен.

Я довольно новичок в asp, но я озадачен тем, что поведение отличается при запуске отладки в VS2010 и в режиме реального времени на веб-сервере.

-

Хорошо, дальнейшее расследование. Я запускаю Cassini, но... в моей форме есть две кнопки - одна для поиска, другая для очистки.

Обе кнопки генерируют один и тот же вид 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 на живом сайте; кнопка поиска не

Кроме того, после того, как страница обслужена, разве не до страницы затем определить, куда она отправляет данные дальше? Так что, если на странице написано, что я собираюсь сюда, это то, что происходит. Моя кнопка очистки показывает goto index.aspx без строки URL-адреса, и это работает.

Это озадачивает меня - если бы кнопка очистки не работала на живом сайте, я бы подумал, что это либо связано с cassini, либо в процессе разработки это один ПК против живого с ПК и сервером. Кроме того, как это может быть проблема cassini / IIS, если браузер выдает команду, куда идти дальше?

Если я захочу взглянуть на это дальше, мне может понадобиться использовать wireshark или подобное, чтобы посмотреть, что на самом деле покидает окно моего браузера, когда я нажимаю кнопку поиска или очистки.


Хорошо, тестовый проект завершен. Я проверил, что этот код работает так, как я хочу, в отладке. Я не могу проверить развертывание в реальном времени на IIS до понедельника.

ASP1 файл страницы:

<%@ 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>

файл страницы 1aspx.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 ответ

Решение

Его один или другой Удалить OnClick="btn_Search_Click" если вам не нужно ничего делать в вашем коде или удалить PostBackUrl="index.aspx" если вы не хотите, чтобы вас перенаправили

Вы могли бы также использовать OnClick="btn_Search_Click" а затем в коде сделать перенаправление на index.aspx

Другие вопросы по тегам