T4MVC:如何使用说Url.Action?

时间:2015-05-07 17:47:55

标签: asp.net-mvc t4mvc

T4MVC文档提示我们可以写

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

代替老式和字符串硬编码

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

(见附图)

enter image description here

也许我严重缺少某些东西,但第一个版本实际上调用控制器的动作方法,显然不是目标+有副作用。我已经使用resharper静态跟随方法调用,并且还调试了:实际调用了该方法,其中(再次)不是目标。

Url.Action有超载接受ActionResult,这就是T4MVC版本不会导致编译错误的原因。如果可以在没有副作用的情况下调用操作方法,也可以正确呈现url。

我的目标是在视图中呈现操作网址,换句话说我正在寻找@Url.Action("Delete", "Dinners", ...))的替代方案。

这是我发现的:

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

我错过了什么? (为什么我们会调用实际的动作方法,只是为了渲染它的url?)

1 个答案:

答案 0 :(得分:3)

这是致命的。我在问题中所描述的一切都是真的,仍然是虚假警报。

我的操作方法的返回值是 string 。请不要问为什么,这是完全合法的,而且逻辑上该方法是无效的(从javascript调用POST,并忽略响应)

该字符串返回值欺骗了T4MVC生成器,因此该方法实际上是由@Url.Action(MVC.Dinners.Delete(Model.DinnerID))

调用的

将方法的返回值更改为ActionResult(并且不执行任何其他操作)后,T4MVC生成的代码将更改,并且不再调用操作方法