使用ASP.net MVC和JQuery将HTML标记(代码)作为字符串发布
我试图通过MVC模型将Form发布到控制器中的Save函数中。 我也在客户端使用tinymce导致基于HTML代码的字符串,如
Content text blah blah ...
。
问题是我不能发布包含
something
的字符串
something
但令人惊讶的是,
something
这个字符串(在“<”之后带有空格)没有问题。 但是,我不能处理这个HTML代码并在每次发布之前创建这些空格。 肯定有更好的办法。
那么,如何通过$ .post方法发布包含HTML代码的字符串? (如果你必须知道,这个项目是一个内容管理系统。所以,我必须将基于HTML的内容文本保存到SQL表中。)我通过调试看到,后期操作甚至没有到达控制器,我认为这是一个唯一的JavaScript问题,我是对的吗?
这是我正在使用的代码:
使用Javascript
function JqueryFromPost(formId){ var form = $(formId); var action = form.attr(“action”); var serializedForm = form.serializeArray(); $ .post(action,serializedForm,function(data){ //获取数据结果在这里...... }); }
CS代码
[HttpPost] public JsonResult SaveArticle(ArticleModel模型) { JsonResult JResult = new JsonResult(); if(ModelState.IsValid) //我在这里以“JResult.Data =”成功“”结束保存 (这也可能是失败的。所以,它只是解释) 返回JResult; }
ASP.NET具有内置的请求validationfunction,可自动帮助防止XSS和HTML注入攻击。 如果要显式禁用此validation,可以使用[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:
如果您使用的是ASP.NET MVC 3.0,则只能在模型上修饰需要带有[AllowHtml]
属性的HTML的属性:
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... }); }
您不应该使用ValidateInput(false)作为MSN在此处说: http : //msdn.microsoft.com/en-us/magazine/hh708755.aspx只需在您想要的html模型属性上使用[AllowHtml]
。
[AllowHtml] public String htmlContainer { get; set; }
另外我认为如果你编码html然后将其发布到服务器会更好。
使用[ValidateInput(false)]是一种非常糟糕的做法,导致许多安全漏洞,模型属性上的[AllowHtml]是更安全可靠的方法。 但是如果你不能使用模型属性,那么有一个更清洁的解决方案。
只需在客户端编码文本(mycase javascript ),在服务端解码它( 控制器 function )。 我使用下面的我的vb.net项目。
var SearchStringValue =
some blah...blah data
现在编码上面的变量。
var encodedSearchStringValue = window.escape(document.getElementById('SearchStringValue').value)
现在使用ajax将encodeSearchStringValue传递给控制器。
在控制器中只需对变量进行解码即可获得
some blah...blah data
.
Dim SearchStringValue = HttpUtility.UrlDecode(encodeSearchStringValue)
希望这可以帮助……… :)