【问题标题】:Json serialization: how to send c# data to javascript script. Error: Invalid characterJson 序列化:如何将 c# 数据发送到 javascript 脚本。错误:无效字符
【发布时间】:2015-01-24 13:51:58
【问题描述】:

我正在尝试将数据从 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 说:

无效字符

在我将 json 解析为 javascript 对象的行中。原因是:json 字符串看起来不应该。这是网络浏览器中“wordsJson”变量的一部分:

我该怎么做才能让它发挥作用?

【问题讨论】:

    标签: javascript c# asp.net-mvc json


    【解决方案1】:

    你正在以一种过于迂回的方式前进。 JSON 被称为“JavaScript 对象表示法”是有原因的。无需将其放入字符串中并重新解析它。您可以只使用 JSON as JavaScript。

    ASP.NET MVC 有一个用于将值序列化为 JSON 的助手,因此您可以使用它并将其分配给 JavaScript 中的变量:

    <script>
        var wordsAsObject = @Html.Raw(Json.Encode(ViewBag.wordsToShow));
    </script>
    

    这将消除在您的操作中进行 JSON 序列化的需要。

    我怀疑您遇到此问题的原因是默认情况下,插入带有@ 的视图中的值会自动进行 HTML 编码。您可以使用Html.Raw() 来防止这种情况,就像我在上面所做的那样,但正如我所说,没有理由先将它放入字符串并解析它。

    【讨论】:

      【解决方案2】:

      我总是创建返回 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');
              }
          })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        • 1970-01-01
        相关资源
        最近更新 更多