2

クロスページ投稿の例を試しています。default.aspxページに1つのテキストボックスと1つのボタンを追加しました

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
 <asp:Button ID="Button2" runat="server" Text="Button"  PostBackUrl="~/About.aspx"/>

about.aspxページの分離コードファイルに次のコードを追加しました

protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.PreviousPage != null)
        {
            TextBox SourceTextBox =
                (TextBox)Page.PreviousPage.FindControl("TextBox1");
            if (SourceTextBox != null)
            {
                Label1.Text = SourceTextBox.Text;
            }
            else
                Label1.Text = "no value";
        }
        else
            Label1.Text = "no value from previous page";
    }

textbox1にテキストを入力してボタンをクリックすると、about.aspxに移動しますが、ラベルに「値なし」の値が表示され、textbox1のテキスト値が表示されません。なぜこれが正しく機能しないのですか?

4

1 に答える 1

3

マスターページがある場合は、が下にあり、最初にを見つけてからを見つける必要がPage.PreviousPage.FindControl("TextBox1");あるため、コードは機能しません。TextBox1ContentPlaceHolder.ContentPlaceHolder.TextBox1

ただし、次のように値を取得する最も簡単な方法があります。

これを前のページに配置します。

public string TextFromBox1
{
    get
    {
        return TextBox1.Text;
    }
}

リダイレクトページで、aspxの前のページを次のように宣言します。

<%@ Reference Page ="~/PreviousPageName.aspx" %>

コードビハインドでは、次のように値を取得します。

if (Page.PreviousPage != null)
{
    if (Page.PreviousPage is PreviousPageClassName)
    {
        Label1.Text = ((PreviousPageClassName)Page.PreviousPage).TextFromBox1;
    }
    else
    {
        Label1.Text = "no value";
    }
}
else
    Label1.Text = "no value from previous page";
于 2012-11-03T12:17:30.953 に答える