繁体   English   中英

ASP.Net LinkBut​​ton不会在第一次发布后更新

[英]ASP.Net LinkButton Does not update on first post back

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

当我单击LinkBut​​ton时,我需要在回发期间将其文本捕获到隐藏字段或视图状态中,以便在发生页面回发时将其显示在Label或TextBox中。

但是不会发生在首页回发上。 取而代之的是,我必须单击LinkBut​​ton两次,以两次回发该值,才能在Label / TextBox中显示该值。

我如何在第一篇回帖中完成它?

我已经尝试过使用ListLink而不使用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();
        }
    }
}

好吧,这是由于服务器端方法执行的顺序而发生的。 页面先加载,然后控件按此顺序单击方法。 不再像现在那样使用LinkBut​​ton控件的客户端JavaScript函数OnClientClick更新隐藏字段,该函数将更新隐藏字段。

简而言之,您只需要在首次加载时执行某些操作即可使用它。

Page.IsPostBack的经典用法是数据绑定/控件初始化。

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

不需要在每次回发中都重新创建持久保存在ViewState和ControlState上的内容,因此您需要检查这种情况以避免执行不必要的代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM