1

サーバーからエンコードされたデータを取得しています。これは、.NETs WebUtility.HtmlEncode を使用してエンコードされています。

このデータは表示され、一部の操作のためにサーバーに送り返す必要があります。この間、JSON.stringify を使用して送信される前に JSON に変換されます。これまでのところ、すべて正常に動作しています。

ただし、これがサーバーに到達すると、潜在的に危険であるため拒否されます。JSON に変換されるオブジェクトには、次のような特殊文字を含む文字列を含めることができます。

「これはジョンのアカウントです」元は「これはジョンのアカウントです」

または「ジョンは ¥ で稼ぎます」 元々は「ジョンは ¥ で稼ぎます」

私の考えでは、これらのエンコードされた文字列値が、適切に形成されている JSON を妨げているということです。

HTMLでエンコードされた文字列をJSON化できるJavascriptの方法はありますか?

編集:明確でない場合、JSON.stringify(data)を実行すると、データはすでにエンコードされています。私のデータの例 -

row[0] = {column1, column2, column3} ここで、各列は、"This is John's account" などの HTML エンコードされた文字列です。

4

3 に答える 3

0

文字列を持つJSONオブジェクトが次のようになると考えると

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

JSONに問題があるとは思いません。POST ではなく GET を介して JSON オブジェクトをメソッドに渡す可能性がはるかに高くなります。

特定の例として、GET メソッドを介して JSON を送信し、GET 動作を許可するように指定していない場合、Microsoft MVC3 フレームワークは安全ではないというエラーをスローします。

この理由は、この回答で見ることができます。

于 2013-05-01T17:52:45.687 に答える
0

最終的な解決策は、ハックのようなものでした。注釈を追加しました-

[ValidateInput(偽)]

バックエンドの関数に追加して、JSON 文字列を検証しようとしないようにします。

于 2013-06-17T18:34:57.480 に答える
0

この機能は、次の 3 つの手順で実現できると思います。

  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 経由でサーバーに返します。その中のパラメーターに渡す必要があります。最初は部分ビュー名で、2 番目はモデルです。これにより、問題が解決されることを願っています。

于 2013-05-02T11:24:42.237 に答える