2015年10月6日 星期二

【ASP.NET MVC】Ambiguous action

對控制器類型 'BBBController' 上動作 'Action' 的目前要求,在下列動作方法之間模稜兩可: 
型別 a.b.c.BBBController 上的 System.Web.Mvc.ActionResult Action(a.b.c.BBBViewModel)
型別 a.b.c.AAAController 上的 System.Web.Mvc.ActionResult Action(a.b.c.AAAViewModel)

這個錯誤讓我還蠻意外的
我 CASE 的理由在 ASP.NET MVC 的 route 並不會認方法多載(想不到阿)。

在我目前的 CASE 中 BBBViewModel 繼承自 AAAViewModel 而 BBBController 亦繼承自 AAAController,所以在 BBBController 的 Action 動作會被跟父類別(AAAController) 的 Action 混淆,但是由於輸入參數的型別不同所以也沒辦法複寫掉,而造成的困局。

最後選了比較簡單的解法,就是使用 [ActionName("ActionChild")]
搭配 Html.BeginForm("ActionChild", "BBBController") 去作出區隔,雖然有點語意累贅但覺得其他比如改 route 或擴充 ActionMethodSelectorAttribute 都太複雜了。

細節看 ↓

ref: StackOverFlow

沒有留言:

張貼留言