我有page1.aspx webform:
<asp:TextBox runat="server" ID="txtPassCode1" TextMode="Password"></asp:TextBox>
<asp:Button runat="server" ID="btnTakeTest1" Text="Go to page 2" PostBackUrl="page2.aspx" />
所以在page2.aspx中,我正在尝试检索txtPassCode1
的值,但我不知道如何找到它,所以我找到了这段代码并将其放在page2的Page_Load事件中。 aspx代码背后,我认为它基本上显示了来自page1的所有POST数据,所以我把&#34; -END - &#34;在每个Request.Form的末尾,并将其显示为标签。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack && Request.RequestType == "POST")
{
if (Request.Form != null && Request.Form.Keys.Count > 0)
{
string[] keys = Request.Form.AllKeys;
for (int i = 0; i < keys.Length; i++)
{
lblPOST.Text = lblPOST.Text + keys[i] + ": " + Request.Form[keys[i]] + " -END- <br>";
}
}
}
}
假设我在第1页输入了1234
并点击了按钮,现在我在page2.aspx中,我得到了这个:
__EVENTTARGET: -END-
__EVENTARGUMENT: -END-
__VIEWSTATE: YznkkVzGlJ8TtCKM2Vzx7+DEhiSoaItNvqFaqJKJYPoMTZu7jerq3btXp1r0iob13dEaKV1fSheRySmdCl69U5KRukE4bi2gD68nYOoj0f93ysiTufpvcr4j1t09lMDwjfuQDmVuJqrDlyzEffG+IkOQfdNEn1sAukVwGBwzCGI= -END-
ctl00$ctl00$MainContent$MainContent$txtPassCode1: 1234-END-
ctl00$ctl00$MainContent$MainContent$btnTakeTest1: Take this test -END-
ctl00$ctl00$MainContent$MainContent$txtPassCode2: -END-
__VIEWSTATEGENERATOR: 22DEEF5F -END-
__PREVIOUSPAGE: OQ8E2uts0p1smCGF7aTw5vs7Ykqr-CAG0J7QCt87boTAs4TxBB2hkHCK_tPL2nCs45bS9uR7NMxjva1XFW7DDI4_CO2Mt84c8cQu_1Yo1gDenS9hrXC5wlh3iaO-Ftv_0 -END-
__EVENTVALIDATION: LpMm3Lf2/xeGRstUHMr5WL79abGTpD92nJ/Ltwjsluwt0J7CmS72WqREhKn4x4jz8zvliCoBOxOAc8VhdKHRYajTycLpjxwSu9iEEWR92JvTYsHvKU9qCq1Z95thv0y9TeUW0mHMRqfOA8Pcd4cpYEL7oT2Iq+l+p2JiDFTTyr8yC28WtWj+E1vP018j3+qt -END-
所以我可以看到它说的第4个:ctl00$ctl00$MainContent$MainContent$txtPassCode1: 1234-END-
=&GT; 1234
是我想要的。如何仅检索此值?
我测试
lblPOST.Text = Request.Form["ctl00$ctl00$MainContent$MainContent$txtPassCode1"];
它有效,但ctl00$ctl00$MainContent$MainContent$txtPassCode1
会保持不变还是会改变?
答案 0 :(得分:1)
PreviousPage
属性允许您从目标页面检索源页面的数据。
在第1页中,您可以定义Password1
公共属性:
public string Password1
{
get { return txtPassCode1.Text; }
}
假设page1表单的类名是Page1
,您可以在第2页的Page_Load
中执行此操作:
protected void Page_Load(object sender, EventArgs e)
{
Page1 source = PreviousPage as Page1;
if (source != null)
{
string password = source.Password1;
...
}
}
的更新强>
为了从Request.Form中获取它,可以将损坏的ID拆分为各种各样的部分&#34;。如果控件是具有给定名称的表单中的唯一控件(意味着没有命名容器,如GridView行或ListView项具有另一个具有相同ID的控件),则以下方法可以返回正确的值:
string password = GetPreviousPageControlValue("txtPassCode1");
private string GetPreviousPageControlValue(string ctlId)
{
foreach (string key in Request.Form.AllKeys)
{
string[] tokens = key.Split('$');
if (tokens[tokens.Length - 1] == ctlId)
{
return Request.Form[key];
}
}
return null;
}
可以扩展此方法以接受控件ID数组作为参数,并测试ID序列是否与最后一个&#34;令牌匹配。关键。这样就可以在容器中找到控件。