我试图通过MVC模型将表单发布到控制器中的Save函数中。我也在客户端使用tinymce,导致基于HTML代码的字符串如<p> Content text blah blah ...</p>
。
问题是我无法发布包含字符串<p> something </p>
但是令人惊讶的是,< p > something < / p >
这个字符串(在“<”后面有空格)没有问题。但是,我无法处理这个html代码,他们在每次发布之前创建这些空格。
那么,如何通过$ .post方法发布包含HTML代码的字符串呢?(如果你必须知道,这个项目是一个内容管理系统,所以我必须将基于HTML的内容文本保存到一个SQL表中。)通过调试,我发现后置动作甚至没有到达控制器。
这里是我使用的代码: Javascript
function JqueryFromPost(formId){
form = $(formId);
var action = form.attr(“action”);
var serializedForm = form.serializeArray();
$ .post(action,serializedForm,function(data){
//获取数据结果在这里...
});
}
CS代码
[HttpPost]
public JsonResult SaveArticle(ArticleModel model)
{
JsonResult JResult = new JsonResult();
if (ModelState.IsValid)
//I do the saving here ending with "JResult.Data = "Success";" (this could also be Failed. So, its just to explain)
return JResult;
}
发布于 2018-02-26 09:53:28
ASP.NET有内置的请求验证,自动帮助防止XSS和HTML注入攻击。如果要显式禁用此验证,可以使用[ValidateInput(false)]
属性:
[HttpPost]
[ValidateInput(false)]
public ActionResult SaveArticle(ArticleModel model)
{
var JResult = new JsonResult();
if (ModelState.IsValid)
{
...
}
return JResult;
}
此外,如果要在ASP.NET 4.0上运行此属性以使该属性生效,则需要将以下内容添加到web.config中:
<httpRuntime requestValidationMode="2.0" />
如果使用ASP.NETMVC 3.0,则只能使用[AllowHtml]
属性:
public class ArticleModel
{
[AllowHtml]
public string SomeProperty { get; set; }
public string SomeOtherProperty { get; set; }
}
同样,在你的javascript函数中,你可能需要serialize()
而不是serializeArray()
:
function JqueryFromPost(formId) {
var form = $(formId);
$.post(form.action, form.serialize(), function (data) {
//Getting the data Result here...
});
}
发布于 2018-02-26 10:24:04
你不应该使用ValidateInput(false),因为MSN在这里说:http : //msdn.microsoft.com/en-us/magazine/hh708755.aspx 只需使用[AllowHtml]
[AllowHtml]
public String htmlContainer { get; set; }
另外我认为,如果你编码html然后发布到服务器,那会更好。
https://stackoverflow.com/questions/-100007429
复制相似问题