我正在尝试从 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);
}
答案 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));