2013-01-19 21 views
0

我很苦惱以下問題,我無法找到一個可接受的方式來解決它。用剃刀在書寫額外的HTML評論

我的挑戰:在Razor視圖的實際屬性值之前寫出HTML註釋。

這是我的(simplyfied)視圖模型:

public class Article 
{ 
    public string Title {get;set;} 
} 

要寫出這個稱號,我只是做我的Razor視圖:

<h2>@Model.Title</h2> 

現在我只想寫出一個HTML註釋所以生成的HTML看起來像這樣(簡單):

<h2><!-- some parameters for a 3th party system --> This is my title</h2> 

HTML評論來從我應用到'標題'屬性的屬性。它的值是生成的,所以屬性值是在運行時使用.NET框架中的TypeDescriptor添加的。

現在我知道我可以通過簡單地使用HTML助手寫出所有屬性來實現此目的。像這樣:@ MyHelper.Write(m => m.Title)

但是,因爲潛在所有我的屬性需要這個HTML註釋我想避免使用HTML助手,因爲它混亂了視圖,並沒有使查看看起來不錯,(更)可讀。

這是我曾嘗試:

  • 創建一個自定義的剃刀基頁(從WebViewPage<TModel>繼承)。並覆蓋它的'寫'方法。

這種作品,但這裏最大的問題是,我不知道哪個屬性在那一刻被寫出來。在'Write'方法中沒有辦法獲取當前的屬性名稱。所以現在我動態地搜索我的模型,找到一個屬性,其中已經寫出了一個值,並在該屬性前添加了HTML註釋。

我的問題:是否有另一種方法來實現我想要的。和以前一樣:我想避免使用HTML助手來寫出所有屬性。 (考慮循環等,這只是不好)。

此外,添加在我的控制器此HTML註釋就是沒有選擇,因爲:

  1. 它不是實際價值的一部分。是一種元數據。
  2. 該HTML評論應該被添加到int's,double's和DateTime's。無法調整雙重屬性以包含字符串。 (Image a List<DateTime>。All date's needs this HTML comment)
  3. 應該根據web.config設置添加HTML註釋。是或否(對於每個屬性的值,實際的HTML評論是不同的)

我意識到這個問題相當長。對不起。任何想法都表示讚賞。

+0

任何你不能把這個放在你的原因'_layout'共享視圖? – Oded

+0

不確定你的意思是'這個'... – RainyDays

+0

標題與評論。 – Oded

回答

1

您可以使用現有的@Html.Raw(Model.Title)

或者您可以使用一個顯示模板。將UIHintAttribute添加到您希望以這種方式行爲的屬性中。

public class MyModel 
{ 
    [UIHint("Raw")] 
    public string MyString { get; set; } 
} 

創建一個名爲Raw.cshtml一個新的顯示模板接受字符串類型的模型:

@model string 
@Html.Raw(model) 

然後在您的視圖中,可以使用:

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

這仍然需要您使用幫手(DisplayFor)。這是一個推薦的做法,允許您使用最少的代碼更改輕鬆更改一個或多個字段的行爲。

+0

哇。我確實閱讀過顯示模板,但沒有意識到這種潛力。去嘗試一下。看起來很有希望。會讓你知道結果。謝謝! – RainyDays

+0

@RainyDays。你是對的,顯示和編輯模板有巨大的潛力。一旦你掌握了它們,你永遠不會再想'@ Model.MyString'。 –

+0

Raw.cshtml通常進入共享的DisplayTemplates文件夾。 – manojlds