2011-02-05 53 views
0

我在ASP.NET中從跨頁面表單帖子獲取數據時遇到問題。如何從ASP.NET中的CrossPage帖子獲取數據?

我的網頁的基本佈局是這樣的:使用母版「Default.master」 的.aspx。 在「Default.master.cs」我檢查會話[「user_IsLoggedIn」]存在,並且是真實的。 如果是我加載一個名爲「ShowLoginInformationControl.ascx」的WebUserControl。 如果沒有,我加載「ShowLoginFormControl.ascx」。

正如您可以猜到第一顯示了一些登錄信息,後者顯示了quicklogin形式和註冊按鈕:

<asp:TextBox Id="QuickloginUserName" RunAt="server" /> 
<asp:TextBox Id="QuickloginPassword" TextMode="Password" RunAt="server" /> 
<asp:Button ID="LoginSubmit" CssClass="LoginSubmit" meta:resourcekey="Login_LoginSubmit" PostBackUrl="~/Login.aspx" runat="server" /> 

形式的目標,以「爲Login.aspx」。該頁面上還有另一個登錄表單,因此用戶可以選擇使用快速登錄或導航到登錄頁面。

的問題是: 我不能從quicklogin形式獲取表單數據。

上Login.aspx.cs的代碼如下所示:

if(Page.IsPostBack) 
{ 
    // POST from this page 
    userName = UserName.Text; 
    password = Password.Text; 
} 
else if(PreviousPage != null && PreviousPage.IsCrossPagePostBack) 
{ 
    // POST from user control 
    TextBox userNamePreviousPageTextBox = (TextBox)PreviousPage.FindControl("QuickloginUserName"); 
    TextBox passwordPreviousPageTextBox = (TextBox)PreviousPage.FindControl("QuickloginPassword"); 

    userName = userNamePreviousPageTextBox.Text; 
    password = passwordPreviousPageTextBox.Text; 
} 

獲取數據從本身的效果很好,從以前的頁面獲取數據的頁面..沒有。 :(

當使用quicklogin即時得到一個NullReferenceError,造成的FindControl返回null。

如何從這兩個輸入字段獲得數據?

PS 我不使用ASP .NET的成員,這可能是一個錯誤,但現在我沒有「學習」使用它的時間。如果(即使有幫助)我不會得到它的工作生病了,並鏈接到更換quicklogin登錄頁面。

回答

0

你好得多創造你想獲取值的公共屬性。 FindControl在最好的時候是脆弱的,但在檢索以前的頁面值時更是如此。

試試這個:

http://msdn.microsoft.com/en-us/library/ms178139.aspx

向下滾動到 '獲取公共屬性值從源頁面'

編輯

你也可以用於創建一個基類母版頁,然後將PreviousPage的母版頁轉換爲該類。然後你可以訪問主頁面的屬性,強類型。這裏有複雜的母版頁上的一些很好的例子:http://odetocode.com/code/450.aspx

+0

我曾嘗試過,但問題是,** PreviousPageType **可能只包含一個源頁面。然而,登錄表單是在母版頁中實現的,所以表單可以從網站上的每個頁面提交。 – johnk 2011-02-06 16:37:57

0

你需要去一個更層下降到使用散熱片dcontrol獲取您的文本框。您首先需要找到Login控件。你也可以讓自己更容易,並且有兩個屬性,UserName和Password,它們只有get訪問器才能返回文本框的相應值。

ShowLoginFormControl loginControl = (ShowLoginFormControl)PreviousPage.FindControl("previousPageLoginControlName"); 

,或者你仍然可以使用的FindControl在loginControl找到你的用戶名和密碼文本框中

+0

嗯,我想我沒有完全理解它的工作方式。遵循你的建議,我嘗試了以下方法:** TextBox userNamePreviousPageTextBox =(TextBox)PreviousPage.FindControl(「ShowLoginFormControl」)。FindControl(「QuickloginUserName」); **首先找到LoginFormControl。但它仍然返回** null **。通過執行以下操作將控件加載到Default.master.cs中:if(blabla){_showControl =(ShowLoginFormControl)LoadControl(「〜/ Shared/WebUserControls/ShowLoginFormControl.ascx」); } else {blabla}然後** PH_Login.Controls.Add(_showControl); ** – johnk 2011-02-05 17:12:51

相關問題