2012-05-20 32 views
0

我正在开发.NET 4.0 MVC项目。我正在尝试向Ajax发布我的KO模型中的一段数据。该数据是以下XML格式的字符串。无法以XML格式发布Ajax post knockout(KO)数据

<SearchCriteria><Criteria SearchOn="Name" SearchValue="test 3" /></SearchCriteria> 

我想要这样发布。

$.ajax({ 
     url: destUrl, 
     data: ko.toJSON(DataToPost()), 
     type: "POST", 
     success: function (result) { 
      // I am doing my stuff here. 
      } 
     }, 
     error: function (request, textStatus, errorThrown) { 
      alert(request.statusText); 
     } 
    }); 

在这里你会注意到发送的数据是"ko.toJSON(DataToPost())"DataToPost()返回我的KO model数据成员DataToPost中包含的XML字符串。 ko.toJSON()用于转换JSON中的KO model数据。

当我们发布任何包含javascripthtml标签的东西时,会抛出运行时异常,通常是thrown。这是.NET的安全功能。以下是例外情况。

A potentially dangerous Request.Form value was detected from the client. 

&lt;SearchCriteria&gt;&lt;Criteria SearchOn=&quot;...est 3\&quot; /&gt;&lt;/SearchCriteria&gt; 

我有时也面临类似情况反馈(虽然我没有使用KO那个时候,这是正常的职务即非Ajax)。我通过使用javascriptescape()克服了那个时间的问题,但是这次它是failed。我用它如下

$.ajax({ 
    url: destUrl, 
    **data: ko.toJSON(escape(SearchCriteria()))**, 
    type: "POST", 
    success: function (result) { 
     // I am doing my stuff here. 
     } 
    }, 
    error: function (request, textStatus, errorThrown) { 
     alert(request.statusText); 
    } 
}); 

其他流行的修补程序是在页面级别或在应用程序级别禁用此安全性。它可以按如下方式完成。

页面级别。

<%@ Page validateRequest="false" %> 

应用程序级别。

<configuration> 
    <system.web> 
     <pages validateRequest="false" /> 
    </system.web> 
</configuration> 

但废除这个治安不好。我不认为这将是一个明智的举措。现在我不知道该怎么做。需要建议。

在此先感谢!

回答

0

这不是一个真正的基因敲除问题。这实际上是将xml数据发布到asp.net。请求验证在beginRequest之前在.NET 4.0中启动。把你的web.config改成这个。

<httpRuntime requestValidationMode="2.0"/> 

现在ValidateInput属性添加到您的具体操作方法。

[ValidateInput(false)] 

这应该允许数据通过而不会影响整个网站的请求验证。

希望这会有所帮助。

+0

感谢您的回复。我也想这样做,但这会像安全妥协。我不舒服。所以我宁愿去采取不同的方法。检查我对问题的回复。 – Aum

0

我意识到,这是很难serializeXML格式的字符串,从而代替XML格式化字符串我决定后的Key value pair列表,而不是。这种方法工作正常。

0

嘿,只需将该xml作为字符串传递并在服务器端进行解码,而不是在客户端对其进行序列化。你能否发布你的html,因为我确定你可以在按钮提交时做错误的事情。