MVC3中的JQuery自动完成

本文关键字:中的 JQuery MVC3 | 更新日期: 2023-09-27 18:23:54

对不起,我是JQuery的新手。。。我一辈子都搞不清我的bug在哪里。当我运行这个程序时,我没有得到任何结果。当我在Firefox和Chrome中检查错误时,它指向源代码行。我就是看不出有什么不对。

这是我的脚本

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $('#CustName').autocomplete({
            //Firefox points to a syntax error here
            source: @SqlHelper.getJSONArray("CustName", "dba.BillingInfo") 
        });
    });
</script>
<p>Customer Name @Html.TextBox("CustName")</p>

SqlHelper.getJsonArray是我用来返回JSON字符串的方法。我已经反复检查了它是否返回了有效的JSON。

    public static string getJSONArray(string column,string table)
    {            
        string qry = "SELECT DISTINCT " + column
                    + " FROM " + table
                    + " WHERE " + column + " is not null"
                    + " AND " + column + " <> ''"
                    + " ORDER BY 1";
        List<string> result = new List<string>();
        SqlDataReader reader = execQry(qry);
        while (reader.Read())
        {
            result.Add(reader[0].ToString());
        }
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        return serializer.Serialize(result);
    }

[更新]以下是firefox正在返回的语法错误:

source: $.parseJSON([&quot;Customer1&quot;,&quot;Customer2...
---------------------^

所以我开始认为问题是引号被渲染为quot;而不是"。如果我尝试将我的源代码设置为["Test1"、"Test2"、"Test3"],效果会很好。有没有一种方法可以让剃刀不对字符串进行HTML编码?

[更新]这就是问题所在。该解决方案使用Html.Raw()

问题是自动对JSON进行HTML编码。修复程序使用HTML.Raw

$('#CustName').autocomplete({
    source: @Html.Raw(SqlHelper.getJSONArray("CustName", "dba.BillingInfo")) 
});

MVC3中的JQuery自动完成

尝试使用$.parseJSON

$(document).ready(function () {
   $('#CustName').autocomplete({
       //Firefox points to a syntax error here
      source: $.parseJSON(@SqlHelper.getJSONArray("CustName", "dba.BillingInfo"))
   });
});