Asp.net mvc 指示标准字符串模板将字符串显示为普通HTML的属性
对于显示/编辑表单,我使用Asp.net mvc 指示标准字符串模板将字符串显示为普通HTML的属性,asp.net-mvc,asp.net-mvc-3,attributes,razor,Asp.net Mvc,Asp.net Mvc 3,Attributes,Razor,对于显示/编辑表单,我使用Html.DisplayForModel()。是否有本机ASP.NET MVC属性可以指示标准字符串模板显示字符串类型为纯html的模型属性,或者我需要创建自己的属性并更改标准字符串模板以应用此行为? 我不想压碎Html.DisplayForModel()表达式并使用Html.Raw(): 您可以创建注释的显示模板(将视图放入DisplayTemplates文件夹) //示例comments.cshtml @model MyApplicationNamespace.Vi
Html.DisplayForModel()
。是否有本机ASP.NET MVC属性可以指示标准字符串模板显示字符串类型为纯html的模型属性,或者我需要创建自己的属性并更改标准字符串模板以应用此行为?
我不想压碎Html.DisplayForModel()
表达式并使用Html.Raw()
:
您可以创建注释的显示模板(将视图放入DisplayTemplates文件夹) //示例comments.cshtml
@model MyApplicationNamespace.ViewModels.Comments
<ul>
@if (Model != null)
{
for (int i =0; i<Model.Count(); i++ )
{
<li>Model.UserName + ":" + Model.CommentText </li>
}
}
</ul>
Html.DisplayFor return
MvcHtmlString
,并且它不再是Html编码的您可以为此属性定义一个特殊的显示模板~/Views/Shared/DisplayTemplates/Unencoded.cshtml
:
@model string
@Html.Raw(Model)
然后在视图模型中使用属性:
public class MyModel
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime DateCreated { get; set; }
[UIHint("Unencoded")]
public string Comment { get; set; } // contains plain html
}
现在,您的主视图可以简单地如下所示:
@model MyModel
@Html.DisplayForModel()
通过使用
Html.Raw
帮助程序,您证明您完全意识到这一点的后果,并且您的站点容易受到XSS攻击,并且您采取了足够的措施来避免这些攻击。可能是我打印错误的复数形式的“注释”误导了您。我指的是注释(文本),它具有字符串类型。这对我来说是一个安全的解决方案,因为在将数据传递到数据库之前,我使用wiki语法对键入的文本进行格式化和html编码。非常感谢。
public class MyModel
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime DateCreated { get; set; }
[UIHint("Unencoded")]
public string Comment { get; set; } // contains plain html
}
@model MyModel
@Html.DisplayForModel()