【问题标题】:Pass JSON file to Javascript ASP.NET MVC4将 JSON 文件传递​​给 Javascript ASP.NET MVC4
【发布时间】:2013-11-07 10:53:08
【问题描述】:

我目前的问题是:如何将 JSON 对象(原样或使用 Newtonsoft.Json 反序列化的 C# 对象)传递给 javascript 文件。

我尝试了以下方法:

Response.Write(string.Concat("<input id='data' type='hidden' value='", json_file, "' />"));

但是当 json 文件以 HTML(作为 html 属性)呈现时,它会在引号字符处停止,我试图对其进行转义,但它也不起作用。 因此,当我在我的 javascript 文件中使用 JSON.parse() 时,语法无效。

问题已解决: - 在我的 .cshtml 文件中声明了一个 javascript 变量数据,将 jsonfile 作为 @ViewBag 元素放入其中。 - 通过 window.Data 在我的 javascript 中得到它 - 将其解析为 json,使用它,魔术就完成了。

(感谢回答的人)

【问题讨论】:

  • json_file是json字符串还是文件名?
  • 它是一个字符串。 (我打开了一个 StreamReader 并将其读到最后并将其存储在一个字符串中)。 json 文件格式正确,我的应用程序可以使用不带引号字符的 json 文件。
  • json_file中有'&gt;吗?
  • 是的,这正是我所描述的问题。当我得到带引号的 json 文件时,当 json 文件没有引号时它会崩溃,它可以工作

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


【解决方案1】:

如果这是一个 json 对象,为什么不将该对象插入页面上的 javascript 变量中,因为您可能想使用该变量,例如在阿贾克斯?

function someThingClicked(){
  var myObject = <%= json_file %>;

  $.ajax({
    type: "POST",
    url: "SomeUrl",
    data: myObject,
    success: function () { },
    contentType: "application/json; charset=utf-8",
    dataType: "json"});
}

这应该为浏览器提供如下内容:

var myObject = {
  someField : 'someValue'
};
...

如果你使用的是剃须刀,你可以这样写:

  var myObject = @Html.Raw(ViewBag.json_file);

假设您已从控制器将json_file 字符串添加到ViewBag

【讨论】:

    【解决方案2】:

    在这种情况下,您可以尝试使用JsonResult

    【讨论】:

      【解决方案3】:

      请试试这个

      Response.Write(string.Concat("<input id='data' type='hidden' value=\"", json_file.Replace('\"', '\''), "\" />"))
      

      【讨论】:

        【解决方案4】:

        这是您的串联结果导致 valuesttribute 值在您预期之前终止。例如。你在json_file中有一个'字符

        例如,如果文件包含

        var x = 'this is a string'
        

        那么你的连接结果会产生无效的html

        <input id='data' type='hidden' value='var x = 'this is a string'' />
        

        请注意value 属性在var x = 之后终止,并且最后的“属性”string 在值之前缺少=(空字符串''

        为避免您应该将 json 分配给一个变量,然后将该值作为值分配给输入元素

        Response.Write(string.Concat("<input id='data' type='hidden'/>",
                                     "<script>$(function(){var x = ", json_file,
                                     ";$("#data").val(JSON.stringify(x));</script>");    
        

        (假设您已经在使用 jQuery,否则您必须使用普通的 JS 来完成,这需要更多的工作,但可以完成

        【讨论】:

          【解决方案5】:

          另一种解决方案,而不是在 html 属性中打印 json 字符串

          1. 在控制器中创建一个返回 json 的操作

            public string GetData()
            {
                //read your json file
                return json_file; //return your json string
            }
            
          2. 在视图端,放置输入标签并通过 ajax 请求获取 json_file

            <input id='data' type='hidden' />
            <script>
                $(function () {
                    $.post("/yourControllerName/getData", {}, function (response) {
                        $("#data").val(response);
                    },'json');
                });
            </script>
            

          【讨论】:

            猜你喜欢
            • 2017-10-15
            • 2013-07-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多