0

我目前的问题是:如何将 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,使用它,魔术完成了。

(谢谢回答的人)

4

5 回答 5

1

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

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

于 2013-11-07T11:18:55.260 回答
1

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

于 2013-11-07T11:19:27.583 回答
0

这是您连接的结果,导致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 来完成,这需要更多的工作,但可以完成

于 2013-11-07T11:38:29.680 回答
0

请试试这个

Response.Write(string.Concat("<input id='data' type='hidden' value=\"", json_file.Replace('\"', '\''), "\" />"))
于 2013-11-07T11:41:53.773 回答
0

另一个解决方案,而不是在 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>
    
于 2013-11-07T11:53:17.023 回答