2011-02-05 11 views
0

ASP.NETのクロスページフォームの投稿からデータを取得する際に問題があります。ASP.NETのCr​​ossPage Postからデータを取得するには?

私のページの基本レイアウトは、 .aspxというMasterpage "Default.master"を使用しています。 "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 ImはNullReferenceErrorを取得を使用する場合は、にFindControlはnullを返し原因は。

私は、これらの二つの入力フィールド?

PS からデータを取得するにはどうすればよい私はASPを使用していませんよ.NETのメンバシップは間違いかもしれませんが、今のところ私はそれを使うことを "学ぶ"時間がありません。(助けを借りても)私はそれを働かせません病気はquickloginをハイパーリンクに置き換える必要がありますログインページ。

答えて

0

を見つけるために、loginControl上にFindControlを使用することができます。 FindControlは時代の幕開けには脆弱ですが、前のページの値を取得することはさらに魅力的です。

このお試しください: 'ソースページからパブリック・プロパティ値を取得' に

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

スクロールダウンを

編集

またの基本クラスを作成することができますマスターページを開き、そのクラスにPreviousPageのマスターページをキャストします。次に、強く型付けされたマスターページのプロパティにアクセスできます。ここに複雑なマスターページにいくつかの良い例があります:http://odetocode.com/code/450.aspx

+0

私はこれを試しましたが、問題は、** PreviousPageType **には1つのsourcepageしか含まれていないことです。ただし、ログインフォームはマスターページに実装されているため、Webサイトの各ページからフォームを送信することができます。 – johnk

+0

私の編集を参照してください - これも役立ちます。 – ScottE

0

フィンを使用するにはもう1つレイヤーを下げる必要がありますテキストボックスを取得するdcontrol。まず、ログインコントロールを見つける必要があります。また、あなた自身ではるかに簡単にでき、UserNameとPasswordの2つのプロパティ、つまりテキストボックスのそれぞれの値を返すアクセサしか取得できない場合があります。

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

またはあなたはまだあなたが取得しようとしている値のためのパブリックプロパティを作成するオフはるかに優れているユーザ名とパスワードテキストボックス

+0

うーん、私はそれが動作する方法を完全に理解していないと思う。 ** TextBox userNamePreviousPageTextBox =(TextBox)PreviousPage.FindControl( "ShowLoginFormControl")FindControl( "QuickloginUserName"); **最初にLoginFormControlを検索します。しかし、それはまだ** null **を返します。 If(blabla){_showControl =(ShowLoginFormControl)LoadControl( "〜/ Shared/WebUserControls/ShowLoginFormControl.ascx");次のようにして、Default.master.csにコントロールをロードします。 } else {blabla}次に** PH_Login.Controls.Add(_showControl); ** – johnk

関連する問題