1

我正在从服务器获取编码数据,这些数据是使用 .NETs WebUtility.HtmlEncode 编码的。

然后显示此数据,并需要将其发送回服务器以进行某些操作。在此期间,它会在使用 JSON.stringify 发送之前转换为 JSON。到目前为止一切正常。

但是,一旦它到达服务器,由于存在潜在危险而被拒绝。转换为 JSON 的对象可以包含带有特殊字符的字符串,例如 -

“这是约翰的帐户”最初是“这是约翰的帐户”

或“约翰以 ¥ 的收入”最初是“约翰以 ¥ 的收入”

我认为这些编码的字符串值会干扰正确形成的 JSON。

Javascript中有什么方法可以JSONify HTML编码的字符串吗?

编辑:如果不清楚,当我执行 JSON.stringify(data) 时,数据已经编码。我的数据示例-

row[0] = {column1, column2, column3} 其中每一列都是 HTML 编码的字符串,例如“这是 John's 帐户”

4

3 回答 3

0

考虑到带有字符串的 JSON 对象看起来像这样

{ 'member1' : 'some string with &#165' }

我不相信这是 JSON 的错。您更有可能通过 GET 而不是 POST 将 JSON 对象传递给方法。

作为一个特定示例,如果您通过 GET 方法提交 JSON 并且未指定允许 GET 行为,Microsoft MVC3 框架将引发关于它不安全的错误。

原因可以在这个答案中看到。

于 2013-05-01T17:52:45.687 回答
0

最后的解决方案更像是一个黑客,我添加了一个注释 -

[验证输入(假)]

到我在后端的函数,这样它就不会尝试验证我的 JSON 字符串。

于 2013-06-17T18:34:57.480 回答
0

我认为您可以通过三个步骤来实现此功能:

  1. 创建局部视图。
  2. 通过在其中传递您的字符串值来调用此局部视图并在那里执行操作。
  3. 通过 JSON 返回您的部分视图并将其替换为旧视图。

但是通过 JSON 返回部分视图有点棘手,我的意思是你不能只通过 JSON 返回部分视图。首先,您需要将部分视图转换为字符串并返回此字符串。下面的方法将你如何实现这一点:

    public string RenderRazorViewToString(string viewName, object model)
    {
        ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
            return sw.GetStringBuilder().ToString();
        }
    }

此方法会将部分视图转换为字符串,并通过 JSON 将其返回给服务器。您需要在其中传递参数,第一个是局部视图名称,第二个是模型。希望您能通过此方法解决您的问题。

于 2013-05-02T11:24:42.237 回答