2017-07-22 5 views
1

HTML/JavaScriptクライアント側からASP.NET MVCサーバー側にXML文字列を渡そうとしています。問題は、XML文字列がサーバーに到達しないのに対して、通常の「非XML」文字列は正常に転送されることです。 XMLがなぜAJAX経由でMVCコントローラに渡されていないのですか?

クライアント側で関連するJavaScriptコード

は以下の通りです:

function TransferXmlDataToServer() { 
    var sXml = "<Tag>This is an XML test string.</Tag>" 
    $.ajax({ 
     type: "POST", 
     url: '@Url.Action("TransferXMLData", "Home")', 
     data: { sInputXml: sXml },        
     dataType: "json", 
     success: function(sReturnValue) { 
      alert("Value returned from server is: " + sReturnValue); 
     }, 
     error: function() { 
      alert("There was an error on the server side"); 
     } 
    }) 
}; 

これは、サーバー側でのMVCホームコントローラ内の対応する関数です:

public JsonResult TransferXMLData(string sInputXml) { 
    // The arguments' name must match those used in the View's Ajax call 
    return Json("Success"); 
} 

TransferXmlDataToServerがクライアント側から呼び出された場合、サーバー側でエラーが発生しましたメッセージが表示されます。サーバー側のTransferXMLDataには、呼び出されていないデバッグ用の印刷ステートメントがいくつか置かれており、この関数には入力されていないことが示されています。一方

sXml = "<Tag>This is an XML test string.</Tag>" 

sXml = "This is a test string." 

すべて期待どおりに動作に置き換えられます。

その他の注意事項:これは、IE11とエッジを試みた

  • XMLストリングをSerialized Jsonに変換してからサーバーに送信しようとしましたが、無駄です。

私が間違っていることを知っていただければ幸いです。

ありがとうございます。

答えて

0

これは、デフォルトでasp.netが、HTMLマークアップがコントローラのアクションに送信されているように見えるようなコンテンツを、エンコードされていない状態から保護するためです。 ValidateInputAttributeを使用して内容を飾る必要があります。

[ValidateInput(false)] 
public JsonResult TransferXMLData(string sInputXml) 
{ 
    // The arguments' name must match those used in the View's Ajax call 
    return Json("Success"); 
} 
関連する問題