Javascript 从C后面的代码调用JS函数#

Javascript 从C后面的代码调用JS函数#,javascript,c#,asp.net,function,Javascript,C#,Asp.net,Function,我有一个名为RowClick的函数onRowClick,运行良好。我试图将它移动到一个按钮,并从后面的代码调用该函数。由于某种原因,未触发该功能。。有人知道我为什么和如何解决这个问题吗 aspx.cs if (e.CommandName == "Addvoucher") { GridDataItem item = (GridDataItem)e.Item; var id = item.GetDataKeyVal

我有一个名为RowClick的函数onRowClick,运行良好。我试图将它移动到一个按钮,并从后面的代码调用该函数。由于某种原因,未触发该功能。。有人知道我为什么和如何解决这个问题吗

aspx.cs

  if (e.CommandName == "Addvoucher")
            {

               GridDataItem item = (GridDataItem)e.Item;

            var id = item.GetDataKeyValue("RowID");

            ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "RowClick("+id+");", true);

            }
aspx


var popUpObj;
函数行单击(发件人、事件参数){
var filterId=eventArgs.getDataKeyValue('RowID');
popUpObj=window.open(“凭证.aspx?参数=“+filterId+”,
“莫达尔波普”,
工具栏=否+
“滚动条=否,”+
位置=否+
“状态栏=否,”+
“菜单栏=否,”+
“可调整大小=0,”+
“宽度=530,”+
“高度=500,”+
“左=450,”+
“顶部=130”
);
popUpObj.focus();
LoadModalDiv();
}
函数LoadModalDiv()
{
var bcgDiv=document.getElementById(“divBackground”);
bcgDiv.style.display=“block”;
}
函数HideModalDiv(){
var bcgDiv=document.getElementById(“divBackground”);
bcgDiv.style.display=“无”;
}
在voucher.aspx页面中

 <script type = "text/javascript">

             function OnClose() {

                 if (window.opener != null && !window.opener.closed) {
                     window.opener.location.reload(); //refreshing parent when popup close
                     // window.opener.HideModalDiv();
                 }

                 //if (window.closed==true) window.open("~/routedoc.aspx");
             }
             window.onunload = OnClose;

    </script>

函数OnClose(){
if(window.opener!=null&&!window.opener.closed){
window.opener.location.reload();//关闭弹出窗口时刷新父项
//window.opener.HideModalDiv();
}
//如果(window.closed==true)window.open(“~/routedoc.aspx”);
}
window.onunload=OnClose;

对代码隐藏(即加载页面)调用JavaScript函数

ClientScript.RegisterStartupScript(GetType(), "Javascript", "javascript:FUNCTIONNAME(); ", true);
如果您有
UpdatePanel
,那么可以这样尝试

ScriptManager.RegisterStartupScript(GetType(), "Javascript", "javascript:FUNCTIONNAME(); ", true);

因为您正在调用
RowClick()
并且在代码中调用了第二个参数
eventArgs
,实际上它是一个
未定义的值

确保传递了正确的参数


由于您只是调用一个javscript函数,因此我建议只在网格行数据绑定上,只将值分配给锚
a
标记或按钮,以便只调用javascript。

像这样更改js函数

function RowClick(filterId) {

popUpObj = window.open("voucher.aspx?param=" + filterId + "",
         "ModalPopUp",
         "toolbar=no," +
         "scrollbars=no," +
         "location=no," +
         "statusbar=no," +
         "menubar=no," +
         "resizable=0," +
         "width=530," +
         "height=500," +
         "left = 450," +
         "top=130" 
        );
         popUpObj.focus();
         LoadModalDiv();


     }

现在不需要此行
var filterId=eventArgs.getDataKeyValue('RowID')
现在您可以在js函数中直接使用参数
filterId

问题是您没有从服务器端传递该js函数的任何参数,而是在客户端函数中获取数据键值,就像在编辑的问题中一样,从服务器端传递行id,并更改客户端函数,如下所示

function RowClick(rowId)
{ 
  // use rowId
  popUpObj = window.open("voucher.aspx?param=" + rowId + "",
}

将RegisterStartupScript更改为RegisterClientScriptBlock。检查浏览器控制台以查看是否有任何错误?未捕获类型错误:无法读取未定义的属性“getDataKeyValue”。这是因为eventAgrs未定义,因为在从代码隐藏调用函数时,您尚未将这些参数传递给函数。现在只需将id作为参数传递并将其作为普通参数接收,并直接在js函数中使用。请查看答案。未捕获类型错误:无法读取未定义的
getDataKeyValue的属性“getDataKeyValue”??。使用getDataKeyValue在哪里发布代码?脚本上的第一行是吗?是的,现在正在工作,但当我按下关闭键(X)时窗口没有关闭我只是在回答中包含了函数行单击你还需要另外两个函数,我没有包含其他函数,因为其他函数将保持不变。是的,除了你告诉我的更改之外,我没有更改任何其他内容,现在我遇到了这个问题。我已经更新了我的代码,对主线程上的同步XMLHttpRequest进行了检查,但由于它对最终用户体验的有害影响,它已被弃用。如需更多帮助,请查看。browserLink:37不赞成为同步请求设置“XMLHttpRequest.withCredentials”。因为错误表明它不赞成,所以我猜您不能这样做,因为您可能正在运行最新版本的浏览器。在另一个浏览器上检查。我可以从这里调用该函数吗?不,只需添加一个模板列,然后添加一个链接,然后在网格行数据绑定事件上找到该链接,并使用
javascript:RowClick(123)
更新href,假设123是您的ID,我已经尝试了您的方法,我无法将RowID作为参数传递。知道为什么吗?
function RowClick(rowId)
{ 
  // use rowId
  popUpObj = window.open("voucher.aspx?param=" + rowId + "",
}