グリッドビューを表示する検索ページがあります。グリッドビューのアイテムは、同じページに戻る 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" />
テストでは、これでうまくいきました。index.aspx?Var1=1&Var2=2 と言うのではなく、index.aspx にフォームが送信されます。
ただし、ライブ サイトに公開すると、これは機能しません。私はまだURL文字列で投稿されます。
ボタンと JavaScript コードの両方に対して asp によって出力されるコードは同一です。
私はaspにかなり慣れていませんが、VS2010でデバッグを実行している場合とWebサーバーでライブで実行している場合の動作が異なることに戸惑っています。
--
わかりました、さらに調査します。Cassini を実行していますが、フォームには 2 つのボタンがあります。1 つは検索、もう 1 つはクリアです。
どちらのボタンも同じ種類の html を生成します。
<input type="submit" name="ctl00$MainContent$btn_Search" value="Search" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$btn_Search", "", false, "", "Index.aspx", 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("ctl00$MainContent$btn_Clear", "", false, "", "Index.aspx", false, false))" id="MainContent_btn_Clear" class="form_btn" />
上記の唯一の違いは、名前、値、およびサーバーで呼び出す関数 (btn_clear または btn_Search) です。
クリア ボタンは、ライブ サイトの postbackurl で機能します。検索ボタンはありません。
また、ページが提供されると、次にデータを投稿する場所を決定するのはページ次第ではありませんか? したがって、ページに「ここに行く」と表示されている場合は、そこに移動します。私のクリアボタンは、URLクエリ文字列なしでindex.aspxに移動すると言い、それは機能します。
これは私を困惑させます-クリアボタンがライブサイトで機能しなかった場合、それはカッシーニと関係があるか、開発中の1台のPC対ライブにはPCとサーバーがあると思います。また、次に進むべきコマンドを発行するのがブラウザーである場合、これが cassini/IIS の問題になる可能性はありますか?
これをさらに詳しく調べたい場合は、wireshark などを使用して、検索またはクリアを押したときに実際にブラウザー ウィンドウから何が出るかを確認する必要があるかもしれません。
OK テスト プロジェクトが完了しました。このコードがデバッグで希望どおりに機能することを確認しました。月曜日まで 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 <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" />
<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;
}
}