【发布时间】:2013-09-23 18:35:10
【问题描述】:
我正在使用 jQueryUI 的autocomplete 来允许搜索用户。文档说明我可以使用数组作为数据源,格式如下:[ { label: "Choice1", value: "value1" }, ... ]
我有一个基类,它提供了一个由我的视图模型继承的唯一Users 列表。视图模型具有以下功能:
public List<TestJson> GetUsers()
{
return AvailableUsers
.Select(u => new TestJson
{
Label = u.LastName + ", " + u.FirstName + "(" + u.UserId + ")",
Value = u.UserId
}).ToList();
}
public class TestJson
{
public string Label { set; get; }
public string Value { get; set; }
}
在我看来,我是这样使用上面的:
var userNameList = @Html.Raw(Json.Encode(Model.GetUsers()));
$("#UserName").autocomplete({
source:userNameList
});
原来userNameList 是这样显示的:
[ { "Label": "Choice1", "Value": "value1" }, ... ]
代替:
[ { label: "Choice1", value: "value1" }, ... ]
如何让我的数组以正确的格式显示?
编辑:根据 cmets 的输入,我已经验证这两种格式在功能上确实是等效的。我做了更多测试,结果发现label 和value 区分大小写。将我的成员更改为小写似乎可以解决问题,但我认为解决方案不是最好的。有关如何将 : 左侧的字符串(这叫什么?)更改为小写的任何建议?
【问题讨论】:
-
这些输出中的任何一个都应该可以正常工作。你遇到了什么问题?
-
[ { label: "Choice1", value: "value1" }, ... ]在功能上等同于[ { "label": "Choice1", "value": "value1" }, ... ],还是您遇到了问题? -
@RobG 你是对的!请看我的编辑
-
我也受到了同样的打击。为了克服这个问题,我选择了小写的属性。您可能会找到一个属性装饰来控制序列化期间使用的名称,但除非您使用 Newtonsoft 库,否则我看不到任何立即可用的内容:stackoverflow.com/questions/8796618/…
-
经过深入研究,似乎 MVC 使用了 JavaScriptSerializer,它不像 JSON.NET 那样尊重 [DataMember] 属性。 stackoverflow.com/questions/12497124/… 所以你可以切换到 JSON.NET 或者看看这个:stackoverflow.com/questions/1302946/…
标签: c# jquery asp.net-mvc jquery-ui