2011-09-16 38 views
3

我在Razor中專門爲顯示貨幣創建了一個顯示模板,我現在想在我的代碼中刪除它,並用接受字符串格式(我可以設置爲「C」)的標準文本顯示模板替換。您能否[已淘汰] Razor中的DisplayTemplate?

然而,有很多事件發生,所以我想用[Obsolete]屬性和警告消息來允許在接下來的幾周內完成這些操作,而不會破壞所有的代碼。

這是可能的還是有等效的方法?

乾杯,

亞當。

+0

由於顯示模板是在運行時確定的,而不是編譯時間,我不認爲你可以這樣做。我現在會推薦一個'@ {// TODO:}'註釋。 – Buildstarted

+0

Visual Studio可以使用正則表達式模式搜索來進行解決方案範圍的查找和替換。我無法想象,爲什麼這樣做甚至需要30分鐘以上才能做出非常大的改變。 – Jay

回答

0

貌似不是:(

的DisplayTemplates是通用的,如:

@Html.DisplayFor(model => model.Foo) 

要使用[Obsolete],你必須標記DisplayFor方法,這將適用於他們。我試着創造「更具體」的版本,看它是否會挑選了(因爲你可以則將標記爲[Obsolete],像這樣:

public static class MyExtensions 
{ 
    [Obsolete] 
    public static MvcHtmlString DisplayFor<TModel, DateTime>(this HtmlHelper<TModel> html, Expression<Func<TModel, DateTime>> expression) 
    { 
     return html.DisplayFor(expression); 
    } 
} 

可悲的是,這並沒有工作 - 它提供了以下錯誤:

Compiler Error Message: CS0121: The call is ambiguous between the following methods or properties: 'MvcApplication11.Models.MyExtensions.DisplayFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>)' and 'System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>)'

所以我不認爲你可以做到你需要什麼[Obsolete]。如果你真的無法在IDE中選擇DisplayFor的調用,你可以嘗試在模板中記錄堆棧跟蹤(因爲你可以在其中執行任何C#),然後運行應用程序。這不會防彈,但可能會有所幫助。