2010-07-01 105 views
1

我正在使用jQuery UI更新我的一个网站,使用jQuery UI来使用母版页。与asp.net主页的jQuery UI页面

这里是我的原代码,其中工程瓦特/母版页的摘要,但不是:

$('#myCancelEventDialog').dialog({ 
     autoOpen: false, 
     width: 500, 
     buttons: { 
      "Cancel This Event": function() { __doPostBack('btnCancel', ''); }, 
      "Do Nothing": function() { $(this).dialog("close"); } 
     } 
    }); 

不过,我看是怎么回事,与母版页换款的名字函数,下面的代码修复了这个例子。

$('#myCancelEventDialog').dialog({ 
     autoOpen: false, 
     width: 500, 
     buttons: { 
      "Cancel This Event": function() { __doPostBack('ctl00$ContentPlaceHolder$btnCancel', ''); }, 
      "Do Nothing": function() { $(this).dialog("close"); } 
     } 
    }); 

通知我已经把“ctl00 $ $的ContentPlaceHolder”前缀的btnCancel,以便相应的回调函数是固定的。

从其他线程我已经阅读了stackoverflow,有一个更好的解决方案比修补代码一次一个地方,因为我已经做了上面,但还没有完全得到它的权利呢。

什么是通用的方式来获得jQuery UI回发函数来找到正确的回调函数,当你使用母版页像我上面的例子?

回答

2

速战速决可能做到以下几点

$('#myCancelEventDialog').dialog({ 
     autoOpen: false, 
     width: 500, 
     buttons: { 
      "Cancel This Event": function() { __doPostBack("'" + $('[id$=btnvalue]')[0].id + "'", ''); }, 
      "Do Nothing": function() { $(this).dialog("close"); } 
     } 
    }); 

这使用jQuery的endswith选择,因为母版页现在意味着你的控件的ID有前缀,但结局是一样的。只要你没有重复的id点缀,这就是工作,这是asp.net团队通过为嵌套控件ID添加前缀而阻止的。 的缺点这是jQuery必须做更多的工作来找到元素,因为它不能使用本地getElementById。

另一个解决将是升级到ASP.NET 4.0中,你可以通过把控件的前缀的clientidmode

+0

不错,我使用4.0,并没有意识到该选项:我需要将4个Clientidmode值中的哪一个设置为?而且据你所知,这个选项有什么缺点吗? – 2010-07-01 18:32:11

+0

只要你没有在各种用户控制/中继器等相同的ID,希望你不应该没有下降!没有其他Web框架试图通过确保所有元素ID都是唯一的来帮助开发人员,他们信任开发人员!至于哪种模式。我会选择静态,但仍取决于您现有的页面/控件 – redsquare 2010-07-01 18:36:27

+0

谢谢,我会给你ClientIDMode提示的答案...很好找。这是一个链接给任何想阅读它的人:https://www.west-wind.com/weblog/posts/54760.aspx – 2010-07-01 18:47:14

1

你将要使用你的控制的客户端ID后:

__doPostBack('<%= btnCancel.ClientID %>', ''); 

然而,如果你使用这个技术,你必须附上暴露于ASP一个div里面的脚本块.net运行时通过runat属性。

<div runat="server"> 
    <script type="text/javascript" language="javascript"> 
     //Your Script Here 
    </script> 
</div>