我在使用下面的代码在第二次单击后获取命令事件args时遇到问题.
所以 - 当我处理一个按钮点击,并生成一个新按钮来替换那里的那个按钮时,我会在下一个按钮点击时丢失视图状态.
关于我需要做些什么才能让它发挥作用的任何建议?我无法显着改变结构,因为我必须在命令处理程序中生成可变数量的完全不相关的按钮.
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
LinkButton btn = new LinkButton();
btn.ID = "btn1";
this.Panel1.Controls.Add(btn);
btn.Command += new CommandEventHandler(myLinkButton_Command);
}
else
{
LinkButton btn = new LinkButton();
btn.ID = "btn1";
this.Panel1.Controls.Add(btn);
btn.Text = "My Button 1";
btn.CommandArgument = "1";
btn.Command += new CommandEventHandler(myLinkButton_Command);
}
}
void myLinkButton_Command(object sender, CommandEventArgs e)
{
int newArg = Convert.ToInt32(e.CommandArgument) + 1;// empty string on second mouse click
this.Panel1.Controls.Clear();
LinkButton myLinkButton = new LinkButton();
myLinkButton.ID = "btn1";
this.Panel1.Controls.Add(myLinkButton);
myLinkButton.Text = "My Button " + newArg.ToString();
myLinkButton.CommandArgument = newArg.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为您的面板中有文字控件.当您第一次添加按钮时,它(按钮)是第二个控件.当您稍后清除面板的控件集合时,它将成为第一个控件,并为第一个控件保存视图状态,后续回发将成为文字.
简单转换
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
Run Code Online (Sandbox Code Playgroud)
至
<asp:Panel ID="Panel1" runat="server" />
Run Code Online (Sandbox Code Playgroud)
它会起作用.
| 归档时间: |
|
| 查看次数: |
1508 次 |
| 最近记录: |