2011-06-20 73 views
0

用於顯示/編輯表單我使用Html.DisplayForModel()。是否有本機的ASP.NET MVC屬性,可以指示標準字符串模板顯示模型屬性作爲純html類型的字符串類型,或者我需要創建自己的屬性並更改標準字符串模板來應用此行爲? 我不想粉碎Html.DisplayForModel()表達和使用Html.Raw()指示標準字符串模板顯示字符串爲純HTML的屬性

@Html.DisplayFor(m => m.Id) 
@Html.DisplayFor(m => m.Title) 
@Html.DisplayFor(m => m.DateCreated) 
@Html.Raw(Model.Comment) 

public class MyModel 
{ 
public int Id {get;set;} 
public string Title {get;set;} 
public DateTime DateCreated {get;set;} 
public string Comment {get;set;} // contains plain html 
} 

回答

1

你可以定義一個特殊的顯示模板,該物業~/Views/Shared/DisplayTemplates/Unencoded.cshtml

@model string 
@Html.Raw(Model) 

然後在您的視圖模型中使用[UIHint]屬性:

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攻擊,並且您採取了足夠的措施來避免它們。

+0

這對我來說是安全的解決方案,因爲在將數據傳遞到數據庫之前,我使用wiki-syntax來輸入文本格式和html編碼。謝謝。 –

0

您可以創建的意見顯示模板(地方觀看到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> 

從現在開始,您的評論將使用此模板呈現。如果你使用內置的autogenerating模板與@Html.DisplayForModel()Comment類型的屬性會自動使用該模板渲染,否則,使用DisplayFor與ID,標題,dateCreated會情況

@Html.DisplayFor(m => m.Comments) 

Html.DisplayFor返回MvcHtmlString,它不HTML編碼任何更多

+0

可能是我誤以爲我的錯誤複數形式的'評論'。我的意思是評論(文本),有字符串的類型。 –