Как получить данные из Поста CrossPage в ASP.NET? - PullRequest
0 голосов
/ 05 февраля 2011

У меня проблема с получением данных из постов кросс-страницы в ASP.NET.

Базовая компоновка моих страниц выглядит следующим образом: .aspx с использованием главной страницы "Default.master".В "Default.master.cs" я проверяю, существует ли Session ["user_IsLoggedIn"] и имеет ли оно значение true.Если это так, я загружаю WebUserControl с именем «ShowLoginInformationControl.ascx».Если нет, я загружаю «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".На этой странице есть еще одна форма входа в систему, поэтому пользователь может использовать быстрый вход или перейти на страницу входа.

Проблема в том, что я не могу получить данные формы из формы быстрого входа.

Код на 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 возвращает ноль.

Как получить данные из этих двух полей ввода?

PS Я не использую членство в ASP.NET, что может быть ошибкой, но на данный момент у меня нет времени, чтобы «научиться» его использовать. Если (даже с помощью) я не заставлю его работать плохонужно заменить quicklogin гиперссылкой на страницу входа.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2011

Вам гораздо лучше создавать открытые свойства для значений, которые вы пытаетесь получить. FindControl хрупок в лучшие времена, но тем более при извлечении значений предыдущей страницы.

Попробуйте это:

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

Прокрутите вниз до ' Получение значений открытого свойства со страницы источника '

Редактировать

Вы также можете создать базовый класс для мастер-страницы, а затем привести мастер-страницу PreviousPage к этому классу. Тогда у вас будет доступ к свойствам главной страницы, строго типизированной. На сложных главных страницах есть несколько хороших примеров: http://odetocode.com/code/450.aspx

0 голосов
/ 05 февраля 2011

Вам нужно перейти еще на один слой вниз, чтобы использовать findcontrol для получения текстовых полей. Сначала вам нужно найти элемент управления Login. Вы также можете сделать это намного проще для себя и иметь два свойства, UserName и Password, которые имеют только методы доступа get, которые возвращают соответствующие значения текстовых полей.

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

или вы все равно можете использовать findcontrol в loginControl, чтобы найти текстовые поля UserName и Password

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...