0

これを行うためのよりクリーンな方法があることを願っています。ソース ページのマークアップには、いくつかの簡単な入力と送信ボタンがあります。

<asp:TextBox runat="server" ID="TBPostDateFrom" placeholder="From" />
<asp:TextBox runat="server" ID="TBPostDateTo" placeholder="Present" />
...
<asp:Button ID="BtnDetailedResults" PostBackUrl="~/Auth/ResultsDetail.aspx" runat="server" Text="View Detailed Results" />

ターゲット ページで、これらのコントロールを参照し、データソース選択パラメーターとして使用しようとしています。これまでのところ、私が見つけた唯一の方法は、長い ASP 生成名「ctl00$MainContent$TBPostDateFrom」と「ctl00$MainContent$TBPostDateTo」を使用することです。

SDSDetailedResults.SelectParameters.Add("PDFrom", Request.Form["ctl00$MainContent$TBPostDateFrom"]);
SDSDetailedResults.SelectParameters.Add("PDTo", Request.Form["ctl00$MainContent$TBPostDateTo"]);

long ct100$ を使用せずにこれらのコントロールを参照する方法はありますか? または、コントロールを直接参照する方法はありますか? 将来、マスター ページやコンテンツ コントロールを変更すると、これらの参照が台無しになると思います。

次のような入力に ClientIDMode=Static を追加して追加しようとしました。

<asp:TextBox runat="server" ID="TBPostDateFrom" placeholder="From" ClientIDMode="Static" />

しかし、それはIDを変更するだけのようです。ターゲット ページでは、ct100$ を使用せずに参照することはまだできません....

Page.PreviousPage メソッドも使用してみましたが、オブジェクトは空になります。

if (Page.PreviousPage != null)
        {
            //post date
            TextBox PostDateFrom = (TextBox)Page.PreviousPage.FindControl("TBPostDateFrom");
            TextBox PostDateTo = (TextBox)Page.PreviousPage.FindControl("TBPostDateTo");

            //at this point both PostDateFrom and PostDateTo are empty, if I do this:
            SDSDetailedResults.SelectParameters.Add("PostDateFrom", PostDateFrom.Text);
            SDSDetailedResults.SelectParameters.Add("PostDateTo", PostDateTo.Text);
            //  I get an IIS error saying the object references dont' exist, or are null
            }
        }

事前に感謝します。ヘルプやガイダンスをいただければ幸いです。

4

1 に答える 1

2

検索ページの場合QueryString、前のページからコントロールを参照しようとするのではなく、 を使用して後のページに情報を渡すことをお勧めします。

これは、異なるテクノロジからこの機能を使用する場合に特に役立ちます。リクエストがどこから来たのかを気にする必要はありません。

SearchPage.aspx:

//Button Click:
var page = "ResultsDetail.aspx";
var url = String.Format("{0}?TBPostDateFrom={1}&TBPostDateTo={2}", page, TBPostDateFrom.Text, TBPostDateTo.Text);

Response.Redirect(url);

結果の詳細.aspx:

var from = DateTime.Parse(Request.QueryString["TBPostDateFrom"]);
var to = DateTime.Parse(Request.QueryString["TBPostDateTo"]);

//Do search based on parameters

詳細情報: MSDN - 方法: ASP.NET Web ページ間で値を渡す

于 2013-09-18T18:38:36.733 に答える