如何从ASP.NET中的CrossPage Post获取数据?

时间:2011-02-05 16:13:08

标签: c# asp.net forms post

我在从ASP.NET中的跨页表单帖子中获取数据时遇到问题。

我的网页的基本布局是这样的: .aspx使用主页“Default.master”。 在“Default.master.cs”中,我检查Session [“user_IsLoggedIn”]是否存在且为true。 如果是,我加载名为“ShowLoginInformationControl.ascx”的WebUserControl。 如果没有,我加载“ShowLoginFormControl.ascx”。

你可以猜到第一个显示了一些登录信息,后者显示了一个快速登录表单和一个注册按钮:

<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或导航到登录页面。

问题是: 我无法从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。

如何从这两个输入字段中获取数据?

P.S。 我没有使用ASP.NET成员身份,这可能是一个错误,但是现在我没有时间“学习”使用它。如果(即使有帮助)我也不会让它工作我必须用登录页面的超链接替换quicklogin。

2 个答案:

答案 0 :(得分:0)

您需要再向下一层才能使用findcontrol来获取文本框。首先需要找到Login控件。您还可以使自己更容易,并且有两个属性,UserName和Password,它们只有get访问器,返回文本框的相应值。

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

或者您仍然可以在loginControl上使用findcontrol来查找您的UserName和Password Text框

答案 1 :(得分:0)

为您尝试检索的值创建公共属性要好得多。 FindControl在最好的时候是脆弱的,但在检索以前的页面值时更是如此。

试试这个:

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

向下滚动到“从源页面获取公共属性值

修改

您还可以为母版页创建基类,然后将PreviousPage的母版页强制转换为该类。然后,您可以访问强类型的母版页的属性。这里有一些关于复杂母版页的好例子:http://odetocode.com/code/450.aspx