The*_*heQ 2 c# asp.net postback .net-2.0
类似于这个问题,ASP.Net动态命令按钮事件不会触发,但问题略有不同.
下面提供的是我的代码的(非常)精简版本.
protected void Page_Load(object sender, EventArgs e)
{
RenderDataItems();
}
private void RenderDataItems()
{
pnlDataItems.Controls.Clear()
DataTable dt = MyClass.GetAllData();
foreach (DataRow dr in dt.Rows)
{
Button b = new Button();
b.Command += new CommandEventHandler(SelectItem);
b.CommandArgument = dr["ID"].ToString();
b.ID = "btnData" + dr["ID"].ToString();
if (hdnDataListID.Value == dr["ID"].ToString())
{
b.Text = "Selected Item";
}
else
{
b.Text = "Pick This Item";
}
pnlDataItems.Controls.Add(b);
}
}
private void SelectItem(object sender, CommandEventArgs e)
{
hdnDataListID.Value = e.CommandArgument.ToString();
RenderDataItems();
}
private void EditSelectItem(int id)
{
MyClass mc = new MyClass(id);
hdnDataListID.Value = mc.ID.ToString();
RenderDataItems();
}
Run Code Online (Sandbox Code Playgroud)
该方法SelectItem仅由RenderDataItems方法中呈现的按钮控件调用.在EditSelectItem由被动态地创建,但不要求在按钮所述改变独立的控制称为RenderDataItems方法需要.
我运行调试器并逐步完成代码,看看会发生什么.加载页面时,RenderDataItems将从中调用PageLoad并使用"选择此文本"的所有按钮填充面板(因为hdnDataListID尚未设置HiddenField控件的值()).
我第一次单击其中一个按钮,RenderDataItems来自PageLoad触发,然后是按钮的初始填充,HiddenField的值设置为ID,第二次RenderDataItems调用从SelectItem方法中发生.按钮被清除并重新创建.正确的按钮具有"选定项目"文本.
我第二次单击其中一个按钮,RenderDataItems来自PageLoad触发,然后是按钮的初始填充,但该SelectItem方法永远不会触发.
第三次单击其中一个按钮时,第一次发生相同的功能.第四个模仿第二个.第五个模仿第一个.等等等等.
当使用EditSelectItem未包含在面板中的控件中的方法时(它是一个DataSource绑定的GridView行,带有调用此方法的按钮),它完全按照我的预期进行操作并正确设置所选/未选中的按钮,同时调用RenderDataItems和EditSelectItem每次都是这个方法.
有任何想法吗?
PS我已经删除了这个页面上的所有AJAX.
| 归档时间: |
|
| 查看次数: |
2319 次 |
| 最近记录: |