将 C# 数组传递给参数中的 Jquery 函数

Pass C# array to Jquery Function in a Parameter

我正在尝试将 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 值。

请帮忙

我建议使用 Newtonsoft.Json NuGet 包,因为它使处理 JSON 变得微不足道。你可以做 以下:

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

我会推荐这个。

var jarr = JsonConvert.SerializeObject(GatepassIDs);

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

不是直接从 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
    });

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