我希望有一种更清洁的方法。我的源页面标记有一些简单的输入和一个提交按钮:
<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
}
}
在此先感谢,非常感谢任何帮助或指导!
答案 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