2013-08-26 47 views
3

我剛剛將我的MVC3應用程序升級到MVC4,並在運行時出現錯誤。 (下調更好看)該調用是模糊的:Html.LabelFor

錯誤CS0121:呼叫是下述方法或屬性之間曖昧: 「MyWebCore.HtmlHelperExtensions.LabelFor<CoreViewModel,string>(System.Web.Mvc.HtmlHelper<CoreViewModel>, System.Linq.Expressions.Expression<System.Func<CoreViewModel,string>>, object)」和
System.Web.Mvc.Html.LabelExtensions.LabelFor<CoreViewModel,string>(System.Web.Mvc.HtmlHelper<CoreViewModel>, System.Linq.Expressions.Expression<System.Func<CoreViewModel,string>>, object)

我有我自己的LabelHelperExtensions類包含LabelFor方法。我的兩個Web.config文件都在其中引用了MVC4。我怎樣才能使用我的擴展方法,而不是MVC的?

我的web.config:add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35

我的視圖/ web.config中:add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc"

+0

你在web.config中檢查了你設置爲MVc的版本嗎?可能你的mvc應用程序引用了兩個版本的MVC程序集。 –

+0

@FelipeOriani不,我的兩個web.config文件都引用MVC 4.0 – gwin003

+0

嗨!我得到的錯誤和你一樣。你找到了解決辦法嗎?謝謝 – Nicola

回答

1

我有一個包含LabelFor方法我自己LabelHelperExtensions類。我怎樣才能使用我的擴展方法,而不是MVC的?

不是唯一的選擇,但重命名您的方法以避免與已知擴展方法的衝突將是最乾淨的。您也可以直接調用靜態方法(使用靜態類名稱預先給出該方法),但這會破壞使用擴展方法的目的。

+0

感謝您的幫助,而不是我確切的解決方案,但讓我想出了它。 – gwin003

+1

這應該是被接受的答案。 MVC3沒有這種能力,所以很多人寫他們自己的擴展類來具有LabelFor功能。升級到MVC4現在會導致衝突,因爲它現在有LabelFor方法,所以解決方案是刪除自己的擴展名(或將其重命名爲具有不同的名稱/簽名)。 –

1

首先,你爲什麼要試圖覆蓋MVC的LabelFor擴展當已經有另一種方法來做到這一點?

http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs

你可能有一個正當的理由做你正在做的,我不知道是什麼,但我會考慮支持的方式來擴展這些助手。

+0

感謝您的幫助,而不是我的確切解決方案,但導致我找出答案。我刪除了一個重寫的方法,它工作。 – gwin003

0

我有一些級聯重寫的方法,它們反映了LabelExtensions類的MVC版本的結構。我無法將它們全部刪除,但我找出哪一個導致問題並將其刪除。