2011-02-05 52 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

相关问题