如何通过控制';是否将ID转换为外部javascript文件?

如何通过控制';是否将ID转换为外部javascript文件?,javascript,c#,asp.net,Javascript,C#,Asp.net,我正在尝试调用一个外部JavaScript函数,该函数接受以下3个参数: function CalculateSum(grdID, hiddenID, TargetColumnIndex) { debugger; var oDataGrid = document.getElementById("<%= grdID.ClientID %>"); var tableRows = oDataGrid.rows; var sum = 0; for (v

我正在尝试调用一个外部JavaScript函数,该函数接受以下3个参数:

function CalculateSum(grdID, hiddenID, TargetColumnIndex) {
    debugger;
    var oDataGrid = document.getElementById("<%= grdID.ClientID %>");
    var tableRows = oDataGrid.rows;
    var sum = 0;
    for (var i = 1; i < tableRows.length; i++) {
        var col1 = oDataGrid.rows[i].cells[TargetColumnIndex];
        for (j = 0; j < col1.childNodes.length; j++) {
            if (col1.childNodes[j].type == "text") {
                if (!isNaN(col1.childNodes[j].value) && col1.childNodes[j].value != "") {
                    sum += parseInt(col1.childNodes[j].value)
                }
            }
        }
    }
    if (!isNaN(sum)) {
        document.getElementById('<%=hiddenID.ClientID %>').value = sum;
    }
}
函数CalculateSum(grdID、hiddenID、TargetColumnIndex){
调试器;
var oDataGrid=document.getElementById(“”);
var tableRows=oDataGrid.rows;
var总和=0;
对于(var i=1;i
这就是我所说的:

<asp:Button ID="btnSave" runat="server" CssClass="btn btn-primary" 
    OnClientClick="CalculateSum('grdPlanObjectivesStandardWeights', '#hidden', 2);" 
    OnClick="btnSave_Click" 
    Text="<%$Resources:DCAACommon, Save%>" 
    ValidationGroup="SaveStandardWeight" />

注意事项:

  • 当我运行此代码时,有一个错误提示:
    'CalculateSum'未定义
  • 我试图传递的参数是:

    grdPlanObjectivesStandardWeights
    是一个
    asp:GridViewID

    hidden
    是一个
    asp:hiddenfield id

    2
    是一个整数值

  • 我甚至不能调试这个函数

  • 此处定义的函数:
    
    


我的代码/方法有什么问题?

从您的标记来看,您似乎正在使用asp.net MVC,或者至少是asp.net。如果是这种情况,则需要注册脚本

类似于以下的方法应该可以工作:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
你可以找到更多

进一步说明我的答案。在web表单代码隐藏中,将以下内容放置在页面加载方法中:

Page.RegisterClientScriptBlock("MyScript",
   "<script language=javascript src='MyJavaScriptFile.js'>");
Page.RegisterClientScriptBlock(“MyScript”,
"");

然后,您应该能够引用您的JS函数

看起来您正试图将aspnet控件ID作为变量发送到客户端,然后将它们与
ClientID一起使用

您或者不将ID作为变量发送,而只是将aspnet ID与ClientID一起使用

<asp:GridView ID="GridView1" runat="server"></asp:GridView>

<asp:HiddenField ID="HiddenField1" runat="server" />

<script type="text/javascript">
    function CalculateSum(TargetColumnIndex) {
        var oDataGrid = document.getElementById("<%= GridView1.ClientID %>");

        if (!isNaN(sum)) {
            document.getElementById('<%=HiddenField1.ClientID %>').value = sum;
            }
        }
</script>
请注意,
在外部文件中不起作用, 因此,第二种选择会更好。coure
CalculateSum(“,”,2)
的属性应放在aspx页面上


您是否考虑过尝试为控件设置
clientdmode=“Static”
,并按原样引用id名称?

检查您是否正确地将javascript文件包含在页面标题中。我应该在前面提到。。正确包含JS文件。以及Manish的观点,确保该方法对页面可见。如果你已经完成了Manish的观点,它可能被错误地隐藏在某些东西里面。另一个检查是有警报(CalculateSum);在页面底部。如果它显示了您的功能,则它被正确地包含。否则它对调用方法不可见或不可见。@VDWWD不是编辑我的问题(删除正文中的2个字符),您应该将其作为一个明确的问题进行投票。!!你完全正确。我忘了。我用的是ASP.NETWebForms。你不能更具体一点吗?我不能使用第一种方法,因为我使用的是外部JS文件函数,但我将尝试第二种方法,并返回反馈,以便你也可以从代码后面调用。我添加了一个片段。基本上,gridview添加了ClientMode属性,然后您应该能够从客户端JS引用它作为document.getElementById(“grdPlanObjectivesStandardWeights”)。。。不需要脚本引用。您还可以为隐藏控件执行以下操作(添加ClientMode)
<script type="text/javascript">

    CalculateSum("<%= GridView1.ClientID %>", "<%= HiddenField1.ClientID %>", 2)

    function CalculateSum(grdID, hiddenID, TargetColumnIndex) {
        var oDataGrid = document.getElementById(grdID);

        if (!isNaN(sum)) {
            document.getElementById(hiddenID).value = sum;
            }
        }
</script>
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "CalculateSum", "CalculateSum('" + GridView1.ClientID + "', '" + HiddenField1.ClientID + "', 2)", true);