我在从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。
答案 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