0

コードスニペットを保存できるC#MVCサイトを構築しています。テキストエリアを使用してコードを貼り付けます。特定の文字を保存しようとすると失敗します。jqueryUIを使用しています。

これは、テキストエリアをDBに保存する関数です。ここで、snippetAddはテキストエリアのIDです。

function addSnippet() {

    $("#newSnippet").show();
    var myStuff = { snippetCode: $('#snippetAdd').val(), lexiconId: $('#lexiconId').val(), snippetDesc: $('#snippetDescAdd').val() };
    var aURL = "/Lexicon/addSnippet";
    $.post(aURL, myStuff, function(data) { parseMessage(data); }, 'json');
}

たとえば、過去に貼り付けて以下を保存しようとすると、一重引用符なしで失敗します。

'<'コード'>'

ありがとう!

4

2 に答える 2

0

問題は、入力をエンコードしていないという事実に起因していると思います。(エラーについて詳しく説明しなかったので、これが最善の推測です。)とにかく、すべての入力でこれを実行してみてください。

encodeURI($('#snippetAdd').val())

このHTMLは文字列をエンコードし、特殊文字をエンコードされた同等の文字に置き換えます。もちろん、フィールドに入力された元のコードを再構成するには、サーバー側で文字列をデコードする必要があります。

于 2012-12-05T13:22:02.423 に答える
0

@LeviBotelhoには正しいアプローチがあります。ただし、コントローラーに注釈を付けることで、受信データを検証しないようにMVCに指示するオプションもあります。

[HttpPost, ValidateInput(false)]
public ActionResult Index(MyModel model)
{...}

注:これは、サーバーを潜在的なスクリプトインジェクション攻撃にさらす可能性があるため、最も安全なアプローチではありません。ユーザーを信頼し、サーバー側ですぐにエンコードを実行する場合に使用する必要があります。

于 2012-12-05T13:32:35.990 に答える