c# - 对于站点上下文之外的模型,允许在 MVC 中将 HTML 用于文本区域

标签 c# asp.net-mvc razor xss data-annotations

我在域模型上有一个描述字段,我想打开它以允许使用 html。当我提交表单时,我收到了“可能有危险的请求”yada....这是我预料到的,但事实证明很难用我当前的设置进行补救。

我的 View 模型有多个对象,例如:

public class MyViewModel
{
    public ISomething Something { get; set; }
    public IAnotherThing Another { get; set; }
}

ISomething 包含描述,接口(interface)和类本身在 mvc 站点的另一个项目中定义。

虽然我确定我可以在 Controller 操作上添加 ValidateInput(false) 属性,但我不一定要打开所有打开的东西...只是这个特定的描述。

无论如何,[AllowHtml] 似乎是答案,但它是在 System.Web.Mvc 中定义的。添加对外部库的引用让我很痛苦,但我咬紧牙关,我什至无法添加该引用,因为它不在我的可用列表中,即使它与 mvc4 应用程序位于同一解决方案中。

我忍不住想象其他人已经能够克服这一点,但我似乎被打败了。非常感谢任何帮助!

最佳答案

您是否尝试过使用 MetaDataType 属性来扩展您的模型?

如果您的模型是分部类,您可以:

namespace YourModelsNamespace
{
    [MetadataType(typeof(ISomethingMD))]
    public partial class ISomething
    {
    }

    public partial class ISomethingMD
    {
        [AllowHtml]
        public string Descriptin { get; set; }
    }
}

这样您就可以“扩展”模型,并为该特定属性设置元数据。这些类将在您的 MVC 项目中,因此您可以更好地控制模型。这种方法可用于添加显示名称属性,以及 DataAnnotations 命名空间中的其他属性。

请注意,此类的命名空间应与您的模型相同。

关于c# - 对于站点上下文之外的模型,允许在 MVC 中将 HTML 用于文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751694/

相关文章:

javascript - 等待 form.submit()/POST 完成

c# - 加密和解密文本的安全方法?

c# - 使用 MVC,如何根据 <td> 之一中包含的日期将 <tr> 格式化为特定类?

javascript - 将 html.actionLink 添加到 Jquery 数据表

javascript - 剑道 UI 模板 : Invalid Template Error

c# - 方法完成后在方法中创建的控件会发生什么情况?

c# - 使 ASP.net GridView 中的列可编辑

c# - 动态表单上的 MVC 模型验证?

asp.net-mvc - jQuery UI 对话框不会关闭

asp.net-mvc - 如何在我的 Razor View 中使用 using 指令为类型别名?