我已经尝试了很长时间才能理解为什么我的LinkButton文本在单击时切换为“on”,但是当我再次单击该按钮时,文本仍然显示“on”,即使在我的代码后面文件中我设置了LinkButton。 text =“off”。我已经运行了调试器,当我将文本设置为“关闭”时 setter方法实际上并没有更新那个特定的LinkButton对象,因为下一次点击就像它从未更新过一样。
我正在使用它来测试为什么我的gridview模板字段中的面板不会切换其可见性打开和关闭,因为同样的事情发生在我单击按钮使面板可见的情况下,然后当我按下时按钮再次面板应该消失但它仍然在屏幕上。 我的目标是让一个gridrow中的每一行都有一个切换链接按钮,该按钮显示一个在每行下面下降的面板。
所以问题的关键在于,为什么我可以切换控件,但不能切换它?。
我的标记基本上与下面相同。请注意保留所有实际正确的服务器属性 为了清楚起见。
我的另一个想法是,按钮是在一个阶段呈现的,这对我来说太晚了,无法进行最终html的更改?
任何人都可以给我任何指示吗?
<asp:GridView>
<Columns>
<asp:TemplateField>
<ItemTemplate>
<div id="wrapper">
<asp:LinkButton ID="LinkButton1" runat="server"
CommandArgument='<%# ((GridViewRow)Container).RowIndex %>'
Text="off" oncommand="changeName"></asp:LinkButton>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
背后的代码
protected void changeName(object sender, CommandEventArgs e)
{
GridViewRow row = MyGridView.Rows[Convert.ToInt32(e.CommandArgument)];
LinkButton button = (LinkButton)row.FindControl("LinkButton1");
if (button.Text.Equals("off"))
{
button.Text = "on";
}
else
{
button.Text = "off";
}
}
答案 0 :(得分:0)
我通过在gridview上删除'EnableViewState =“False”来解决了这个问题。
阅读本文后 http://forums.asp.net/t/1590532.aspx?Visible+invisible+panel+inside+Gridview
它给了我一些关于整个回发过程的想法。 我不确定这是否正确但对我来说有点意义吗?
如果我的gridview正在禁用viewstate及其所有嵌套控件(如“Panel”和“LinkButton”)的父级,那么这些嵌套控件的状态将在回发时丢失。所以任何 如果更改不是,我在代码隐藏文件中修改的动态更改将丢失 被保留在gridview的视图状态中。
可能有一种更好的方式来实现我的设计,但目前离开viewstate 在父控制似乎解决了它。