我正在使用Jquery UI在我的站点中的文本框上具有自动完成功能,JSON在MVC ViewModel中序列化,然后在视图中使用。 JSON没有在运行时正确生成。 浏览器内控制台返回以下内容
未捕获的SyntaxError:意外的令牌&
我还没有使用我自己的数据,所以项目名称仍然与JqueryUI示例相关,使用我自己的JSON数据。
视图(剃刀)
<script>
$(function () {
var projects = @Model.TeamsAsJson
$("#project").autocomplete({
minLength: 0,
source: projects,
focus: function (event, ui) {
$("#project").val(ui.item.TeamName);
return false;
},
select: function (event, ui) {
$("#project").val(ui.item.TeamName);
$("#project-id").val(ui.item.TeamName);
$("#project-description").html(ui.item.AreaName);
$("#project-icon").attr("src", "images/" + ui.item.icon);
return false;
}
})
.autocomplete("instance")._renderItem = function (ul, item) {
return $("<li>")
.append("<a>" + item.TeamName + "<br>" + item.AreaName + "</a>")
.appendTo(ul);
};
});
</script>
<div id="project-label">Select a project (type "j" for a start):</div>
<img id="project-icon" src="images/transparent_1x1.png" class="ui-state-default" alt="">
<input id="project">
<input type="hidden" id="project-id">
<p id="project-description"></p>
ViewModel
public String TeamsAsJson{ get{
JavaScriptSerializer Serializer = new JavaScriptSerializer();
return Serializer.Serialize(TeamHelpers.GetAllTeams());
}
private set { TeamsAsJson = value; }
}
序列化JSON
[{"TeamID":1,"TeamName":"Bilborough Broncos","ClubID":null,"LeagueID":null,"IsPremium":false,"PremiumLength":null,"PremiumStart":null,"CountryID":"GB","AreaName":"Nottingham","Club":null,"League":null}]
应该是什么
[{"TeamID":1,"TeamName":"Bilborough Broncos","ClubID":null,"LeagueID":null,"IsPremium":false,"PremiumLength":null,"PremiumStart":null,"CountryID":"GB","AreaName":"Nottingham","Club":null,"League":null}]
答案 0 :(得分:1)
c#变量正在进行html编码。修复是:
var projects = @Html.Raw(Model.TeamsAsJson)
注意:这是从问题中提取的,并代表OP发布在此处。
答案 1 :(得分:0)
回答1:
尝试将JSON.parse
用作: -
$("#project").autocomplete({
minLength: 0,
source: projects,
focus: function (event, ui) {
ui=JSON.parse(ui.replace(/"/g,'"'));
$("#project").val(ui.item.TeamName);
return false;
},
select: function (event, ui) {
ui=JSON.parse(ui.replace(/"/g,'"'));
$("#project").val(ui.item.TeamName);
$("#project-id").val(ui.item.TeamName);
$("#project-description").html(ui.item.AreaName);
$("#project-icon").attr("src", "images/" + ui.item.icon);
return false;
}
})
回答2:
<强>视图模型:强>
public String TeamsAsJson{ get{
JavaScriptSerializer Serializer = new JavaScriptSerializer();
return Serializer.Serialize(JsonConvert.SerializeObject(TeamHelpers.GetAllTeams(), Formatting.None));
}
private set { TeamsAsJson = value; }
}