2013-12-20 19 views
3

ViewModel中是否有相當於@Html.Raw(Model.Property)的任何註釋?HTML.Raw相當於ViewModel中的DataAnnotation

我試圖使用[DisplayFormat(HtmlEncode=false)]沒有成功創建HTML標記(<b>,<span>),而不是將其顯示爲文本。

+1

事情是,任何註釋仍然需要一個包裝值,通常是'Html.DisplayFor'。因此,現在您正在輸入'@ Html.DisplayFor(m => m.Property)'而不是'@ Html.Raw(Model.Property)'。如果你的目標是保存輸入,那麼這對你沒有任何幫助。唯一能解決問題的方法就是@ m0sa,因爲你可以直接編寫'@ Model.Property' –

+0

不保存輸入,但(無法解釋爲什麼)我以某種方式看到@ Html.DisplayFor(m => m。屬性)'比'@ Html.Raw()'更清潔或者「OK」。 –

回答

3

您也可以用這裏面創建一個模板Views\Shared\DisplayTemplates\Html.cshtml使用UIHint做到這一點:

@model string 
@Html.Raw(Model) 

然後在你的模型:

[UIHint("Html")] 
public string MyHtml {get; set;} 

然後可以在所有其他輸出觀點爲:

@Html.DisplayFor(m => m.MyHtml) 
+0

在我的情況下,我沒有看到UIHint如何使用Html.Raw解決方案(我想通過將格式移動到ViewModel儘可能讓Helpers更清潔一點.cshtml)。 –

+0

IMO,我更喜歡這樣做。我最終只在Views \ Shared \ DisplayTemplates \中有一個html.cshtml文件,並且我只通過指定UIHint來簡化我的模型,在所有其他視圖中,我不必執行@ Html.Raw。 – hutchonoid

+1

啊!真喜歡它!我一見不見。 @ Html.Raw將被放置到模板中,我認爲它在.cshtml。想想今天早上我還沒有醒來。 –

2

將財產設爲IHtmlString(您可以使用MvcHtmlString實現)而不是string

public class MyModel 
{ 
    public IHtmlString Property { get; private set; } 
    public MyModel(string property) 
    { 
      Property = new MvcHtmlString(property); 
    } 
} 
+0

這很好,但我不想創建一個新的屬性只是爲了避免@ Html.Raw,我並不討厭它。呵呵! –