2011-06-28 52 views
2

我試圖從觸發一個回發從腳本並且還傳遞事件參數。我能夠觸發回發**但無法傳遞事件參數。從javascript傳遞事件參數到代碼隱藏,同時使用ClientScript.GetPostBackEventReference

以下功能不起作用。它不喜歡ClientScript.GetPostBackEventReference中的args參數。

<script type="text/javascript"> 

function TriggerServerSideClick(args) { 
    //btnDummy is a asp.net server-side button control    
    <%=ClientScript.GetPostBackEventReference(btnDummy, args , true)%> 

    //tried this -> <%= 'ClientScript.GetPostBackEventReference 
    //  (btnDummy,' + args + ', true)' %> , 
    //  but i guess i am definitely missing something. 
} 

</script> 

我在這裏錯過了什麼?

我知道下面的工作

__doPostBack('btnDummy', args); 

,但想從__doPostBack遠離因爲這可能最終改變和嘗試,而不是ClientScript.GetPostBackEventReference

謝謝你的時間。

@Brian:非常感謝您的跟蹤。我試過你的佔位符方法,但我得到一個JavaScript錯誤。 (消息:預期 ';'
這裏是viewsource片段:

var postbackUrl = '__doPostBack('ctl00$MainContent$btnDummy','{0}')'; 

    function TriggerServerSideClick(args) { 

     var url = String.format(postbackUrl, args); 
     eval(url); 
    } 
+0

它缺少在最後一個分號,一項PostBackUrl字符串內。評估時,沒有結局;。 –

+0

再次感謝您的堅持。這不起作用,嘗試使用螢火蟲,鉻開發工具進行調試。不確定缺少什麼? snippet:var postbackUrl ='__doPostBack('btnDummy','{0}');'; – StudentForever

回答

3

嘗試這種情況:

var postbackUrl = '<%=ClientScript.GetPostBackEventReference(btnDummy, "{0}", true)%>'; 

function TriggerServerSideClick(args) { 
    var url = String.format(postbackUrl, args); 
    eval(url); 
} 

將一個佔位符,其中參數應該是,則使用一個客戶端方法來替換佔位符(客戶端String.format方法)並使用它來回發。

HTH。

+0

謝謝,就像我說過的,我不想顯式調用__doPostBack(...)方法來支持ClientScript.GetPostBackEventReference。 – StudentForever

+0

謝謝。好的問題不是選擇ClientScript.GetPostBackEventReference重載[鏈接](http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.getpostbackeventreference.aspx)問題是發送參數變量,而不是硬編碼的字符串,如「我的論點」。我想發送一個json的字符串表示作爲參數。例如:<%= Page.ClientScript.GetPostBackEventReference(new PostBackOptions(btnDummy,jsonStrArgs))%> – StudentForever

+0

上面已更新 - 沒有直接的客戶端/服務器混合和匹配,但您可以使用解決方法來完成此操作。 –

2

剛纔我正在處理這個問題時,Brian Mains的回答給了我正確的方向。唯一的區別是,我並沒有使用客戶端的String.format - 我用的是主流的JavaScript與string.replace:

//js 
args = someComplicatedDynamicStuff(); 
myPostback = <%= Page.ClientScript.GetPostBackEventReference(this, "args") 
        .Replace("'", "\\'") %>; // server-side replace to 
               // inject string delimiters 
eval(myPostback.replace('args',args)); 
相關問題