2010-07-01 77 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>