更新2UrlHelper.Action不映射到該地區,該控制器是正確
好了 - 所以它看起來像我的問題再次略微改變:-)
我已經意識到現在UrlHelper.Action似乎不能正確解析任何區域中的URL,除非明確指定區域名稱。如果沒有指定它,它似乎會返回我們當前所在的區域名稱,使得它看起來像是從站點的一部分開始工作,但是另一個區域中的同一鏈接會解析爲錯誤的區域名稱。
要麼我做了一些時髦的事情,使它做到這一點,或者我不完全理解這個Action方法是如何工作的。
更新1
我可以通過以下操作,使這項工作:
return helper.Action("add", "product",new {area = "storemanagement"});
稍微改變了我的問題。
爲什麼MVC路由不會消除具有相同名稱的控制器的歧義並解決指定了操作方法的控制器?
原始發佈
嘿大家,
我創建的UrlHelper類的輔助方法時遇到一個小問題的途徑之一。
下面是有問題的輔助方法代碼:
public static string AddProduct(this UrlHelper helper)
{
return helper.Action("add", "product");
}
我基本上有一個名爲「產品」兩個控制器這是在網站的不同區域。其中一個用於瀏覽產品,另一個用於產品管理。只有一個產品控制器包含一個操作方法「添加」。
當我輸出addProduct命令
<%: Url.AddProduct() %>
的值的區域名稱解析爲我瀏覽當前區域和不含有添加操作方法的產品控制器正確的區域。
有什麼我需要在路線中設置?我不確定路由如何與UrlHelper.Action協同工作,所以我不知道是否有可能做我想要的。
乾杯任何幫助。
嘗試添加控制器和區域名稱作爲附加參數使用此方法sig UrlHelper.Action方法(字符串,字符串,對象)' – Ahmad 2010-08-04 12:28:10
謝謝艾哈邁德。這實際上工作,所以我會添加它作爲我的問題的更新。我仍然感興趣的是爲什麼路由系統不會消除這兩個控制器的歧義,而是似乎放棄並假定使用當前區域。 – 2010-08-04 12:50:18
回答你的問題,需要深入挖掘MVC框架的內部,找出發生這種情況的原因。無論如何,根據我所看到的,只有「控制器」和「行動」路線值有特殊的處理方式,也就是說,根據你呼叫輔助者的地方,區域是有點推斷/假定的。因此需要指定區域參數。 – Ahmad 2010-08-04 16:26:45