使用ClientScript.GetPostBackEventReference时,将事件参数从javascript传递到代码隐藏

时间:2011-06-28 14:54:25

标签: javascript asp.net

我正在尝试从 java-script 触发回发并传递事件参数。我能够触发回发**但无法传递事件参数。

以下功能不起作用。它不喜欢args中的ClientScript.GetPostBackEventReference参数。

<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);
   }

2 个答案:

答案 0 :(得分:3)

试试这个:

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

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

将一个占位符放在参数所在的位置,然后使用客户端方法替换占位符(客户端String.format方法)并使用它来回发。

HTH。

答案 1 :(得分: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));