Json serialization: how to send c# data to javascript script. Error: Invalid character
Json serialization: how to send c# data to javascript script. Error: Invalid character
我正在尝试将数据从 Entity Framework 数据库发送到我网页上的 js 脚本。这是我的 MVC 控制器:
public ActionResult Index()
{
var wordsToShow = db.Words.Where(w => w.OwnerName == User.Identity.Name); // && DateTime.Compare(w.NextReview, DateTime.Now) <= 0
ViewBag.wordsToShow = HttpUtility.HtmlDecode(new JavaScriptSerializer().Serialize(wordsToShow));
var test = ViewBag.wordsToShow;
return View();
}
在 index.cshtml 中,我输入了以下代码:
<script>
var wordsJson = "@ViewBag.wordsToShow.ToString()";
var wordsAsObject = JSON.parse(wordsJson);
</script>
问题是,javascript 说:
Invalid character
在我将 json 解析为 javascript 对象的行中。原因是:json 字符串看起来不应该。这是网络浏览器中 "wordsJson" 变量的一部分:
我该怎么做才能让它发挥作用?
我总是创建 return JsonResult/string 的方法
喜欢:
public string GetData()
{
//your logic here
string json_sales = JsonConvert.SerializeObject(<<your data>>);
return json_sales;
}
在 JavaScript 中,我只执行 AJAX 请求:
$.ajax({
url: 'PUT_YOUR_URL_HERE_To_METHOD_GetData',
dataType: "json",
type: "GET",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ Make: maka.value }),
async: true, // Or false
cache: false,
success: function (data) {
//do something
}
},
error: function (xhr) {
alert('error');
}
})
你走得太迂回了。 JSON 被称为 "JavaScript Object Notation" 是有原因的。无需将其放入字符串中并重新解析。您可以只使用 JSON as JavaScript.
ASP.NET MVC 有一个帮助程序将值序列化为 JSON,因此您可以使用它并将其分配给 JavaScript:
中的变量
<script>
var wordsAsObject = @Html.Raw(Json.Encode(ViewBag.wordsToShow));
</script>
这将消除在您的 Action 中进行 JSON 序列化的需要。
我怀疑您遇到此问题的原因是默认情况下,使用 @
插入到视图中的值会自动进行 HTML 编码。您可以使用 Html.Raw()
来防止这种情况,正如我在上面所做的那样,但正如我所说,没有理由先将其放入字符串并进行解析。
我正在尝试将数据从 Entity Framework 数据库发送到我网页上的 js 脚本。这是我的 MVC 控制器:
public ActionResult Index()
{
var wordsToShow = db.Words.Where(w => w.OwnerName == User.Identity.Name); // && DateTime.Compare(w.NextReview, DateTime.Now) <= 0
ViewBag.wordsToShow = HttpUtility.HtmlDecode(new JavaScriptSerializer().Serialize(wordsToShow));
var test = ViewBag.wordsToShow;
return View();
}
在 index.cshtml 中,我输入了以下代码:
<script>
var wordsJson = "@ViewBag.wordsToShow.ToString()";
var wordsAsObject = JSON.parse(wordsJson);
</script>
问题是,javascript 说:
Invalid character
在我将 json 解析为 javascript 对象的行中。原因是:json 字符串看起来不应该。这是网络浏览器中 "wordsJson" 变量的一部分:
我该怎么做才能让它发挥作用?
我总是创建 return JsonResult/string 的方法 喜欢:
public string GetData()
{
//your logic here
string json_sales = JsonConvert.SerializeObject(<<your data>>);
return json_sales;
}
在 JavaScript 中,我只执行 AJAX 请求:
$.ajax({
url: 'PUT_YOUR_URL_HERE_To_METHOD_GetData',
dataType: "json",
type: "GET",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ Make: maka.value }),
async: true, // Or false
cache: false,
success: function (data) {
//do something
}
},
error: function (xhr) {
alert('error');
}
})
你走得太迂回了。 JSON 被称为 "JavaScript Object Notation" 是有原因的。无需将其放入字符串中并重新解析。您可以只使用 JSON as JavaScript.
ASP.NET MVC 有一个帮助程序将值序列化为 JSON,因此您可以使用它并将其分配给 JavaScript:
中的变量<script>
var wordsAsObject = @Html.Raw(Json.Encode(ViewBag.wordsToShow));
</script>
这将消除在您的 Action 中进行 JSON 序列化的需要。
我怀疑您遇到此问题的原因是默认情况下,使用 @
插入到视图中的值会自动进行 HTML 编码。您可以使用 Html.Raw()
来防止这种情况,正如我在上面所做的那样,但正如我所说,没有理由先将其放入字符串并进行解析。