控件创建后,先设置属性,再添加到页面,导致工作不正常的问题

前些日子出过一个问题,并在csdn上求得了解决方案,具体内容参看帖子:

http://topic.csdn.net/u/20091130/15/3ac9bde9-802d-49ec-8841-66ae1f8dae24.html

 

就是说在js里创建一个option后,先设置文本和值,再添加到dom中:

var opn = document.createElement("OPTION");
opn.innerText = 11;
opn.value = 11;
obj.appendChild(opn);

结果导致页面这个select会逐渐变短,改成先添加到dom中,后设置文本和值,就正常了:

var opn = document.createElement("OPTION");
obj.appendChild(opn);
opn.innerText = 11;
opn.value = 11;

 

 

 

昨天发博客:防止页面按钮被重复点击,导致页面重复提交的问题 ,然后同事根据这个文章修改了一个项目代码,结果导致自定义控件的按钮事件不能正常执行,表现为点击按钮后,绑定的事件没有执行:

代码如下:

ImageButton btn = new ImageButton();
btn.ID = "_btn";
btn.Click += new ImageClickEventHandler(OnClick);
btn.OnClientClick = "if(!confirm('您确认吗?')){return false;}" +
    Page.ClientScript.GetPostBackEventReference(btn, string.Empty) + ";this.disabled = true;return false;";
this.Controls.Add(btn);

检查发现是ClientScript.GetPostBackEventReference生成的__EVENTTARGET参数少了前面的控件ID

问题的原因一样,是因为先设置属性,再添加控件造成的,改成下面这样就可以了:

ImageButton btn = new ImageButton();

this.Controls.Add(btn);
btn.ID = "_btn";
btn.Click += new ImageClickEventHandler(OnClick);
btn.OnClientClick = "if(!confirm('您确认吗?')){return false;}" +
    Page.ClientScript.GetPostBackEventReference(btn, string.Empty) + ";this.disabled = true;return false;";

 

上面2个问题类似,所以列在一起记录下来。

你可能感兴趣的:(工作)