现在的位置: 首页 > 综合 > 正文

asp.net 服务器产生的脚本与手工添加的脚本冲突

2012年09月03日 ⁄ 综合 ⁄ 共 962字 ⁄ 字号 评论关闭

服务器控件的服务器事件一般对应到客户端控件的相应事件,如Dropdownlist的SelectedIndexChanged事件对应HTML <Select>的onchange事件。如果你要手工增加一个onchange事件,则会在客户端产生两个onchange,浏览器就会忽略掉一个。比如用户希望每当改变了Dropdownlist中的选项就保存到数据库(虽然不是很常见,但确实有这种需要),但同时还希望提醒用户是否确实要做保存。显然,保存的代码应该放在SelectedIndexChanged事件中,而提醒的工作应该手工加一段onchange事件。结果就是两个 onchange只能执行一个。正确的方法应该是添加一个不可见的保存按钮,在手工增加的onchange事件中调用此按钮生成的程序。

Page_Load方法如下:

Dim sCmd as string

sCmd=Page.ClientScript.GetPostBackClientHyperlink(btnUpdate, "")

If not page.isPostback then

Dropdownlist1.Attributes.add("onchange","ConfirmUpdate(""" & sCmd & """)")

End if

ConfirmUpdate函数如下

<Script language=”javascript”>

function ConfirmUpdate(cmd){

if confirm(“Are you sure to update?”)

eval(cmd);

}

</Script>

注:ClientScriptManager.GetPostBackEventReference 方法和ClientScriptManager.GetPostBackClientHyperlink方法的功能是一样的,都是在客户端生成脚本,当控件的特定事件触发时,可以回发至服务器。

他们在客户端的表现形式有点不同,GetPostBackClientHyperlink表现为:javascript:__doPostBack('mycontrol1','myanchor1'),GetPostBackEventReference 表现为::__doPostBack('mycontrol1','myanchor1')。

抱歉!评论已关闭.