使用postbackurl传递变量而不引用ctl00 $ MainContent

时间:2013-09-18 18:24:42

标签: asp.net postbackurl

我希望有一种更清洁的方法。我的源页面标记有一些简单的输入和一个提交按钮:

<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" />

在我的目标页面上,我正在尝试引用这些控件并将它们用作数据源选择参数。到目前为止,我发现这样做的唯一方法是使用long 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" />

但这似乎只会改变身份证。在我的目标页面上,我仍然无法在不使用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
            }
        }

在此先感谢,非常感谢任何帮助或指导!

1 个答案:

答案 0 :(得分: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);

ResultDetails.aspx:

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

//Do search based on parameters

有关详细信息:MSDN - How to: Pass Values Between ASP.NET Web Pages