2011-06-28 38 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)); 
相关问题