1

在 ListView 控件中<ItemTemplate>,我使用的是 LinkBut​​ton。当列表填充时,它有一组链接按钮。链接按钮文本是从使用数据源检索的记录中的列生成的。

当我单击链接按钮时,我需要在回发期间将其文本捕获到隐藏字段或视图状态中,以便在页面回发发生时将其显示在标签或文本框中。

但它不会发生在第一页回帖上。相反,我必须单击 LinkBut​​ton 两次才能获得两个回发,以便将值显示在标签/文本框中。

我怎样才能在第一次回帖中完成它?

我在没有 ListView 的情况下尝试了相同的操作,只使用了如下所示的 LinkBut​​ton,并获得了相同的结果。

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 上保留的内容不需要在每次回发时重新创建,因此您检查这种情况以避免执行不必要的代码。

另一个经典用法是获取和处理查询字符串参数。您无需在回发时执行此操作。

于 2014-04-17T06:59:54.673 回答