1

ListView コントロールの内部では<ItemTemplate>、LinkBut​​ton を使用しています。List が読み込まれると、一連の LinkBut​​tons が含まれます。リンク ボタンのテキストは、データ ソースを使用して取得したレコードの列から生成されます。

LinkBut​​ton をクリックすると、ページ ポスト バックが発生したときに Label または TextBox に表示されるように、ポスト バック中に隠しフィールドまたはビュー ステートにテキストをキャプチャする必要があります。

ただし、最初のページのポストバックでは発生しません。代わりに、Label/TextBox に値を表示するには、LinkBut​​ton を 2 回クリックして 2 回ポストバックする必要があります。

最初のポストバックでそれを行うにはどうすればよいですか?

以下のように LinkBut​​ton だけを使用して、ListView なしで同じことを試してみましたが、同じ結果が得られました。

protected void LinkButton_Click(object sender, EventArgs e)
{
    LinkButton selectedButton = (LinkButton)sender;
    HiddenField1.Value = selectedButton.Text;
    ViewState["LinkButtonText"] = selectedButton.Text;
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(HiddenField1.Value))
    {
        Label1.Text = HiddenField1.Value;
    }
    TextBox1.Text = HiddenField1.Value;

    if (ViewState["LinkButtonText"] != null)
    {
        if (!string.IsNullOrEmpty(ViewState["LinkButtonText"].ToString()))
        {
            ViewStateTextBox.Text = ViewState["LinkButtonText"].ToString();
        }
    }
}
4

2 に答える 2

1

さて、それはサーバー側のメソッド実行のシーケンスから発生します。事前にページをロードし、次にコントロールのクリック メソッドをこの順序でロードします。そのような非表示フィールドを更新する代わりに、非表示フィールドを更新する LinkBut​​ton コントロールのクライアント側 JavaScript 関数OnClientClickを使用するようになりました。

于 2014-04-17T10:18:22.677 に答える
0

つまり、最初のロード時にのみ何かを実行する必要があるたびに使用します。

Page.IsPostBack の古典的な使用法は、データ バインディング/コントロールの初期化です。

if(!Page.IsPostBack)
{
   //Control Initialization
   //Databinding
}

ViewState と ControlState で永続化されているものは、ポストバックごとに再作成する必要がないため、不要なコードの実行を避けるためにこの条件をチェックします。

もう 1 つの古典的な使用法は、Querystring パラメーターの取得と処理です。ポストバックでそれを行う必要はありません。

于 2014-04-17T06:59:54.673 に答える