0

私のWebサイトは、TextBoxとImageButtonの2つのコントロールを配置したマスターページを使用しています。これらは、すべてのコンテンツサイトで表示およびアクセスできるようになっています。Site.Masterのaspxコードは次のとおりです。

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:ImageButton ID="ImageBtn" runat="server" ImageUrl="~/Image.png"
  PostBackUrl="~/Result.aspx"></asp:ImageButton>

ボタンをクリックすると、訪問者がResult.aspxにリダイレクトされます。

Result.aspx.csのPage_Loadイベントには次のものがあります。

    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox txbx = this.Master.FindControl("TextBox1") as TextBox;
        if (txbx != null)
        {
            Label1.Text = "Value: " + txbx.Text;
        }
        else
        {
            Label1.Text = "TextBox seems to be null";
        }
    }

画像ボタンを最初にクリックすると、奇妙な動作が表示されます。訪問者は、TextBox1に値が入力されていても、ページ「値:」(つまり、空の文字列「」)からこの情報を取得します。その後のクリックで、値が正しく表示されます(例:「Value:SomeText」)。

値が初めて「一緒に来ない」のはなぜですか?

それを確実にするためのより良い方法はありますか?

  • 訪問者はResult.aspxにリダイレクトされますAND
  • 値が「登録済み」であり、Result.aspx.csで処理できること
  • 画像ボタンを使用せずにResult.aspxを入力すると、ユーザーがリダイレクトされますPostBackURL

IsPostBackを試しましたが、マスターページを前のページとして使用すると奇妙な動作をするようです...

答えてくれてありがとう!

心から、

ケイ氏

4

2 に答える 2

1

マスターページのImageButtonで使用PostBackURLしていて、別のページから取得した場合は、次を使用する必要があります。

PreviousPage.Master.FindControl("TextBox1") as TextBox;

ページを表示してImageButtonをクリックする場合はPostBackURL、次を使用する必要があります。

Master.FinControl("TextBox1") as TextBox;

(この場合、PreviousPageはnullになります)

次のようなものを使用できます。

var txbx = PreviousPage == null ?
    Master.FindControl("TextBox1") as TextBox :
    PreviousPage.Master.FindControl("TextBox1") as TextBox;

備考セクションのhttp://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage(v=vs.100).aspxを参照してください。

于 2012-08-17T13:57:15.730 に答える
0

あなたはあなたのフォームがマスターから派生していることを知っているので...あなたはそれを得るために明示的な型キャストを試みましたか?そのような

TextBox txbx =((site.Master)this).Textbox1;

次に、そこからやりたいことを何でもします... asp.netにアクセスしてからしばらく経ちましたが、古いアプリの1つで同様のことをしたことを覚えておいてください。

于 2012-08-17T11:30:26.747 に答える