0

HTMLマークアップを作成するためにjqueryテキストエディタープラグインを使用しています。テキスト エディターで作成されたマークアップを js 変数で取得し、その変数を ajax 呼び出しを使用してサーバーにポストします。

cshtml でマークアップします。

<div>
   <div id="textEditor">@Html.Raw(Model.htmlMarkUp)</div>
</div>
<input type="button" value="Save" onclick="SaveChanges();" />

JS:

$(document).ready(function () {
    $('#textEditor').jqte();
});

    function SaveChanges(){
    var txtContent = $(".jqte_editor").html();//.jqte_editor is the div added by plugin


        var path = '/Pages/saveChanges';
        $.ajax({
            type: "POST",
            url: path,
            data: { htmlMarkUp: txtContent },
            success: function (result) { alert(result) },
            error: function () { }
        });
    }

モデル:

public class MyModel
{
  public string htmlMarkUp{ get; set; }
}

コントローラ:

public string saveChanges(MyModel oModel)
{
 ....
}

問題:

プラグインで提供されている美化ツールを使用しない限り、アクションの結果は正しく呼び出されます。つまり、テキスト エディターで単純なプレーン テキストを記述した場合、ajax 呼び出しは正しく機能しますが、太字ツールなどのツールを使用するとすぐに呼び出されます。 ajax 呼び出しが機能しなくなります。

最初は、これは web 構成の json サイズの制限によるものだと思いましたが、それも問題ではありません。

json サイズを指定するために、web.config に次のように記述しました。

<system.web.extensions>
  <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="5000">
        </jsonSerialization>
      </webServices>
  </scripting>
</system.web.extensions>

この問題は、マークアップ サイズとは関係ありません。問題は、テキスト エディター プラグインの太字斜体のようなツールを使用する場合です。

何がうまくいかないのか

前もって感謝します。

4

2 に答える 2

2

問題が発生しました。問題はテキスト エディタではなく、asp セキュリティにありました。ajax経由でhtmlコンテンツ(htmlタグを含む)をサーバーに送信しようとすると、サーバーはそのようなリクエストを拒否していました。

テキスト エディター ツールを使用していないときはプレーン文字列と見なされていましたが、太字ツールなどのツールを使用するとすぐに、テキスト エディター マークアップを収集している変数にも html タグが付けられました。サーバーに到達したときのそのようなパラメータは、セキュリティ上の問題によりサーバーによって拒否されました。

したがって、このセキュリティ チェックをスキップするには、アクションの結果に次の属性を追加します。

[ValidateInput(false)]
public string saveChanges(MyModel oModel)
{
 ....
}

これはサーバー側のソリューションです。変数を base64 エンコーディングにエンコードすることで、クライアント側で問題を処理することもできます。

var txtContent = $(".jqte_editor").html();

var encodedHtml =  $.base64.encode(txtContent );
于 2014-04-19T11:49:05.283 に答える
0

テキスト エディタの内容をシリアル化する必要があります

   $.ajax({
        type: "POST",
        url: path,
        data: $('.jqte_editor').serialize(),
        success: function (result) { alert(result) },
        error: function () { }
    });

また、あなたの SaveChanges メソッドには [Post] 属性がありますか?

データサイズに同様の問題があり、appSetting を使用しました

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>
于 2014-04-19T11:46:35.507 に答える