[英]ASP.Net LinkButton Does not update on first post back
在ListView控件的<ItemTemplate>
我使用的是LinkButton。 当列表填充时,它具有一组LinkButton。 链接按钮文本是从使用数据源检索的记录中的列中生成的。
当我单击LinkButton时,我需要在回发期间将其文本捕获到隐藏字段或视图状态中,以便在发生页面回发时将其显示在Label或TextBox中。
但是不会发生在首页回发上。 取而代之的是,我必须单击LinkButton两次,以两次回发该值,才能在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();
}
}
}
好吧,这是由于服务器端方法执行的顺序而发生的。 页面先加载,然后控件按此顺序单击方法。 不再像现在那样使用LinkButton控件的客户端JavaScript函数OnClientClick更新隐藏字段,该函数将更新隐藏字段。
简而言之,您只需要在首次加载时执行某些操作即可使用它。
Page.IsPostBack的经典用法是数据绑定/控件初始化。
if(!Page.IsPostBack)
{
//Control Initialization
//Databinding
}
不需要在每次回发中都重新创建持久保存在ViewState和ControlState上的内容,因此您需要检查这种情况以避免执行不必要的代码。
另一个经典用法是获取和处理Querystring参数。 您无需在回发时执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.