Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 指示标准字符串模板将字符串显示为普通HTML的属性_Asp.net Mvc_Asp.net Mvc 3_Attributes_Razor - Fatal编程技术网

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()