【问题标题】:Pass C# array to Jquery Function in a Parameter在参数中将 C# 数组传递给 Jquery 函数
【发布时间】:2019-11-02 22:44:32
【问题描述】:

我正在尝试将 C# 数组作为参数传递给 JQuery 函数。

我调用该函数的 C# 代码是:

//Create an Array from filtered DataTable Column
    var GatepassIDs = defaultView.ToTable().AsEnumerable().Select(r => r.Field<string>("GatePassID")).ToArray<string>(); 


  //Pass Array to JQuery function                 
                Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "<script type='text/javascript' >FillGatePassIDSmartBox("+GatepassIDs+");</script>", false);

jQuery 脚本:

<script type="text/javascript" >
function FillGatePassIDSmartBox(GatepassIDs) {        

        $('#<%=txt_gatepassID.ClientID%>').autocomplete({
            source: GatepassIDs
    });
}
</script>

问题是它从 C# 调用传递 System.String[] 而不是传递 Array 值。

请帮忙

【问题讨论】:

    标签: javascript c# jquery asp.net jquery-ui


    【解决方案1】:

    不要直接从 C# 将数组作为参数传递,而是将数组作为变量发送到 JavaScript。然后你可以将它作为参数发送给你的函数:

      var GatepassIDs = defaultView.ToTable().AsEnumerable().Select(r => r.Field<string>("GatePassID")).ToArray<string>();
    
      StringBuilder sb = new StringBuilder();
      sb.Append("<script>");
      sb.Append("var yourGatePassIDArray= new Array;");
      foreach(string str in GatepassIDs)
      {
        sb.Append("yourGatePassIDArray.push('" + str + "');");
      }
     sb.Append("FillGatePassIDSmartBox(yourGatePassIDArray)");
      sb.Append("</script>");
    
      Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", sb.ToString());
    

    然后在你的 JavaScript 中使用它:

    function FillGatePassIDSmartBox(yourGatePassIDArray) {        
    
            $('#<%=txt_gatepassID.ClientID%>').autocomplete({
                source: yourGatePassIDArray
        });
    

    您必须在全局上下文中声明您的数组。

    【讨论】:

      【解决方案2】:

      我建议使用 Newtonsoft.Json NuGet 包,因为它可以轻松处理 JSON。你可以这样做 以下:

      var jsonArray = JsonConvert.SerializeObject(GatepassIDs);
      Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "<script type='text/javascript' >FillGatePassIDSmartBox("+ jsonArray +");</script>", false);
      

      【讨论】:

      • 那么在Jquery方法中如何访问它们呢?
      • @AlinaAnjum Jquery 方法 FillGatePassIDSmartBox 参数将获取字符串数组。
      • 我正在使用 SharePoint,因此存在一些限制。不使用 JSON 也能达到同样的效果吗?
      【解决方案3】:

      我会推荐这个。

      var jarr = JsonConvert.SerializeObject(GatepassIDs);

      Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "FillGatePassIDSmartBox("+ jarr +");", false);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-27
        • 2010-09-27
        • 1970-01-01
        • 2011-04-16
        • 2017-02-05
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多