在ListView控件的<ItemTemplate>
内部我正在使用LinkButton。
当List填充时,它有一组LinkButtons。链接按钮文本是从使用数据源检索的记录中的列生成的。
当我点击LinkButton时,我需要在回发期间将其文本捕获到隐藏字段或视图状态,以便在页面回发时它将显示在Label或TextBox中。
但这不会发生在首页上。相反,我必须两次点击LinkButton两个帖子后面,以便在Label / TextBox中显示该值。
我怎样才能在第一篇文章中完成它?
我在没有ListView的情况下尝试了同样的方法,只使用了如下的LinkButton,并得到了相同的结果。
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();
}
}
}
答案 0 :(得分:0)
简而言之,每次只需要首次加载时就可以使用它。
Page.IsPostBack的经典用法是数据绑定/控件初始化。
if(!Page.IsPostBack)
{
//Control Initialization
//Databinding
}
ViewState和ControlState上持久保存的内容不需要在每次回发时重新创建,因此您需要检查此条件以避免执行不必要的代码。
另一个经典用法是获取和处理Querystring参数。你不需要在回发时这样做。
答案 1 :(得分:0)
好吧,它发生在服务器端方法执行的序列之后。页面先加载,然后是控件单击方法,按此顺序。而不是像现在使用LinkButton控件的客户端JavaScript函数 OnClientClick 更新隐藏字段,而是更新隐藏字段。