2016-10-21 35 views
0

私は、ボタンをクリックすると、TextArea内のデータをコントローラに送信するmvcプログラムで作業しました。通常、私のコードは期待どおりに機能しましたが、TextArea内のデータがhtmlベースのデータで構成されている場合には当てはまりませんでした。送信データがhtmlデータのときにajaxリクエストを送信

HTMLコード:

<textarea id="bodyInfo"> </textarea> 
<button onclick="Submit()" id="submitInfo">Create Notification</button> 

ajax: 
    function Submit() { 
     $.ajax({ 
      url: '@Url.Action("GetResults", "notification")', 
      type: 'GET', 
      data: { body: $('#bodyInfo').val()), 
      cache: 'false', 
      dataType: 'html', 
      success: function (result) { 
       $('#resultsTblInfo').html(result); 
      } 
     }); 
     return false; 
    } 

のTextAreaデータのサンプル例:

<table style="width:100%"> 
<tbody> 
<tr> 
<td class="ellipses-title" style="color:#22557f;font-size:15px;font-weight:bold;margin-bottom:10px;margin-top:7px;border-right:1px solid #BFF1FD;text-align:right;padding-right:15px;"> The New Admin is Coming</td> 
<td class="ellipses-text" style="padding-left:15px;" valign="center">Hello<br> Hello2</a>. 
</td> 
</tr> 
</tbody> 
</table> 

上で見た何のTextAreaをHTMLデータが、生のテキストではなかったが、それはHTMLデータだったときに失敗したときに動作します。

私は

"encodeURIComponentで($( '#bodyInfo')。valを())" の代わりに "$( '#bodyInfo')。valを()"

を使用して、この作品を作ることができました

コントローラ側では、実行中

"body = HttpUtility.UrlDecode(body)";

同じことを達成するためのより良い選択肢はありますか? encodeURIComponentをその意図した性質に対して使用していますか?どうして$( '#bodyInfo').html値をajaxに渡すとval()が動作しないのですか?この質問が重複している場合は、誰かが私にリンクを提供することができれば感謝します。(私はGoogleを使って検索しましたが、満足できる答えが見つかりませんでした)

答えて

1

これはまさにencodeURIComponentのものです。考え方は、(問題の可能性がある)値を送信するときにエンコードし、それを使用するためにサーバー側でデコードする必要があります。

実際には、この例はMDNencodeURIComponentドキュメントページにあります:サーバーへの予期しない要求を避けるために

、あなたは一部として渡される任意のユーザが入力したパラメータにencodeURIComponentでを呼び出す必要がありますURIのたとえば、ユーザーは変数のコメントに「タイムtime = again」と入力できます。この変数にencodeURIComponentを使用しないと、comment = Thyme%20 & time =が再び与えられます。アンパサンドと等号は、新しいキーと値のペアになります。

1

私はあなたのtextareaのHTMLデータに "&"という文字があったと思います。 のように、文字&をサーバーに送信できないという問題があります。これは、データを送信するときに、ブラウザがデータを収集し、&文字http://example.php?a=something&b=otherで区切られているためです。したがって、データに&文字がある場合、ブラウザはデータコンポーネントかURIコンポーネントかを区別できません。

一般的な解決方法は、送信前にデータをbase64テキストに変換することです。この方法で、サーバーでbase64_decodeフォント(case of php)を使用してデコードすることができます。あなたはbase64でデータをwindow.btoaのjavascriptの関数を使ってエンコードすることができます。別の解決策はあなたが使ったものです。

第3の解決策は、&文字をあなたが[@#alpha]のようなテキストエリアに決して存在しないと知っているもので置き換えることです。 助けてくれることを願っています。

関連する問題