我在Razor中專門爲顯示貨幣創建了一個顯示模板,我現在想在我的代碼中刪除它,並用接受字符串格式(我可以設置爲「C」)的標準文本顯示模板替換。您能否[已淘汰] Razor中的DisplayTemplate?
然而,有很多事件發生,所以我想用[Obsolete]屬性和警告消息來允許在接下來的幾周內完成這些操作,而不會破壞所有的代碼。
這是可能的還是有等效的方法?
乾杯,
亞當。
我在Razor中專門爲顯示貨幣創建了一個顯示模板,我現在想在我的代碼中刪除它,並用接受字符串格式(我可以設置爲「C」)的標準文本顯示模板替換。您能否[已淘汰] Razor中的DisplayTemplate?
然而,有很多事件發生,所以我想用[Obsolete]屬性和警告消息來允許在接下來的幾周內完成這些操作,而不會破壞所有的代碼。
這是可能的還是有等效的方法?
乾杯,
亞當。
貌似不是:(
的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#),然後運行應用程序。這不會防彈,但可能會有所幫助。
由於顯示模板是在運行時確定的,而不是編譯時間,我不認爲你可以這樣做。我現在會推薦一個'@ {// TODO:}'註釋。 – Buildstarted
Visual Studio可以使用正則表達式模式搜索來進行解決方案範圍的查找和替換。我無法想象,爲什麼這樣做甚至需要30分鐘以上才能做出非常大的改變。 – Jay