ASP.NET MVC3,Html.TextAreaFor没有编码?

时间:2010-11-22 12:34:44

标签: asp.net-mvc encoding asp.net-mvc-3

如何使用Html.TextAreaForwithout编码呢? 我知道这是一个安全风险,但我有一个单独的类来消毒任何文本。

示例:

@ Html.TextAreaFor(model => model.PostBodyText,10,100,1)

我打算将它与TinyMCE一起使用。

此致 RAVEN

更新 我正在使用新的Razor View引擎。

3 个答案:

答案 0 :(得分:8)

你需要自己动手:

<textarea cols="100" id="PostBodyText" name="PostBodyText" rows="10">
    @MvcHtmlString.Create(Model.PostBodyText)
</textarea>

当然,在安全性方面,这可能非常危险,因为您的网站现在容易受到XSS攻击。所以问题是为什么当你可以简单地依靠HTML帮助程序为你完成这项工作时,有一个单独的类来清理所有文本?

答案 1 :(得分:1)

作为替代选项,您可能希望使用ValidateInput,如here所述。 MVC风格的一个例子是:

[ValidateInput(false)]
public ActionResult Method(){
     return View()
}

[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Method(){
    // your stuff here
    RedirectToAction("index"); // or something 
}

我认为这更像MVC的方式。现在您的控制器告诉您该控制器方法存在安全问题。您的视图可以是使用html助手等的任何普通视图。请注意,这可以启用各种输入,而不是过滤。 虽然会与TinyMCE合作。

//修改

woops我看到你需要添加

<httpRuntime requestValidationMode="2.0"/>

到webconfig以及新版本的MVC。猜猜这可能不是一条路。

答案 2 :(得分:1)

在model属性上使用[AllowHtml]。正如我在In ASP.NET MVC 3, how do I get at the model using Razor Syntax in a Create() View?中学到的那样。