如何将控件的ID传递到外部javascript文件?

时间:2017-01-05 14:24:30

标签: javascript c# asp.net

我试图调用接受3个参数的外部JavaScript函数,如下所示:

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

这就是我所说的:

<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' is undefined
  • 我试图传递的参数是:

    grdPlanObjectivesStandardWeightsasp:GridViewID

    hiddenasp:HiddenFieldID

    2是一个int值。

  • 我甚至无法调试此功能。

  • 此处定义的功能:<script src="../../Common/Scripts/SummationOfAGridviewColumnValues.js"></script>

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

3 个答案:

答案 0 :(得分:1)

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

以下内容应该有效:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);

您可以找到更多at this MSDN article

扩展我的答案。在您的Web表单代码中,将以下内容放在Page_Load方法中:

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

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

答案 1 :(得分:1)

看起来您正在尝试将aspnet控件ID作为可变客户端发送,然后将其与ClientID一起使用。

您要么不将ID作为变量发送,只需使用带有ClientID的aspnet ID

<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>

或者将正确的ID发送给该功能,但之后您不再需要<%= GridView1.ClientID %>

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

请注意,<%= GridView1.ClientID %>无法在外部文件中使用,   所以第二种选择会更好。然后应将coure CalculateSum("<%= GridView1.ClientID %>", "<%= HiddenField1.ClientID %>", 2)放在aspx页面上。

答案 2 :(得分:1)

您是否曾考虑尝试为控件设置ClientIdMode="Static",并按原样引用ID名称?