2015-05-07 79 views
4

T4MVC文檔提示我們可以寫T4MVC:如何使用說Url.Action?

@Url.Action(MVC.Dinners.Delete(Model.DinnerID)) 

indstead老式和字符串硬編碼

@Url.Action("Delete", "Dinners", ...)) 

(見附件圖)

enter image description here

也許我很認真地失去了一些東西的,但第一個版本實際上會致電控制器的動作方法,明顯不是目標+有副作用。我跟着resharper靜態方法調用,並調試:實際調用方法,這(再)不是目標。

的確,Url.Action有重載接受ActionResult,這就是爲什麼T4MVC版本不會導致編譯錯誤。這也是真實的情況下,可以調用的動作方法沒有副作用的URL正確呈現。

我的目標是在視圖中呈現動作url,換句話說,我真的在尋找替代品@Url.Action("Delete", "Dinners", ...))

以下是我發現:

@Url.Action(MVC.Dinner.ActionNames.Delete, MVC.Dinner.Name) 

我缺少什麼? (爲什麼我們會調用實際的操作方法,只是爲了渲染它的url?)

回答

3

這是致命的。我在問題中所描述的全部都是真實的,但仍然是虛假警惕。

我的操作方法的返回值是字符串。請不要問爲什麼,這是完全合法的,從邏輯上說,這種方法是無效的(稱爲從POST POST,並且響應被忽略)

該字符串返回值愚弄T4MVC生成器,所以該方法實際上是由@Url.Action(MVC.Dinners.Delete(Model.DinnerID))

方法的返回值更改爲的ActionResult(和別的什麼都不做)的T4MVC生成的代碼改變和行動方法不再叫