T4MVC:如何使用 say Url.Action?
T4MVC: How to use with say Url.Action?
我们可以编写的 T4MVC 文档提示
@Url.Action(MVC.Dinners.Delete(Model.DinnerID))
而不是老式的硬编码字符串
@Url.Action("Delete", "Dinners", ...))
(见附图)
也许我严重遗漏了什么,但第一个版本实际上会调用控制器的动作方法,这显然不是目标+有副作用。我已经使用 resharper 静态地跟踪方法调用,并且还进行了调试:实际上调用了该方法,这(再次)不是目标。
确实 Url.Action 有接受 ActionResult 的重载,这就是 T4MVC 版本不会导致编译错误的原因。如果可以在没有副作用的情况下调用操作方法 url 正确呈现,这也是正确的。
我的目标是在视图中呈现动作 url,换句话说,我真的在寻找 @Url.Action("Delete", "Dinners", ...))
的替代方案。
这是我发现的:
@Url.Action(MVC.Dinner.ActionNames.Delete, MVC.Dinner.Name)
我错过了什么? (为什么我们要调用实际的操作方法,只是为了呈现它的 url?)
那是致命的。我在问题中描述的都是真的,但仍然是误报。
我的操作方法的 return 值为 string。请不要问为什么,这是完全合法的,逻辑上该方法是无效的(从javascript调用为POST,响应被忽略)
那个字符串 return 值欺骗了 T4MVC 生成器,所以该方法实际上是由 @Url.Action(MVC.Dinners.Delete(Model.DinnerID))
调用的
将方法的 return 值更改为 ActionResult 后(并且什么都不做),T4MVC 生成的代码被更改并且不再调用操作方法
我们可以编写的 T4MVC 文档提示
@Url.Action(MVC.Dinners.Delete(Model.DinnerID))
而不是老式的硬编码字符串
@Url.Action("Delete", "Dinners", ...))
(见附图)
也许我严重遗漏了什么,但第一个版本实际上会调用控制器的动作方法,这显然不是目标+有副作用。我已经使用 resharper 静态地跟踪方法调用,并且还进行了调试:实际上调用了该方法,这(再次)不是目标。
确实 Url.Action 有接受 ActionResult 的重载,这就是 T4MVC 版本不会导致编译错误的原因。如果可以在没有副作用的情况下调用操作方法 url 正确呈现,这也是正确的。
我的目标是在视图中呈现动作 url,换句话说,我真的在寻找 @Url.Action("Delete", "Dinners", ...))
的替代方案。
这是我发现的:
@Url.Action(MVC.Dinner.ActionNames.Delete, MVC.Dinner.Name)
我错过了什么? (为什么我们要调用实际的操作方法,只是为了呈现它的 url?)
那是致命的。我在问题中描述的都是真的,但仍然是误报。
我的操作方法的 return 值为 string。请不要问为什么,这是完全合法的,逻辑上该方法是无效的(从javascript调用为POST,响应被忽略)
那个字符串 return 值欺骗了 T4MVC 生成器,所以该方法实际上是由 @Url.Action(MVC.Dinners.Delete(Model.DinnerID))
将方法的 return 值更改为 ActionResult 后(并且什么都不做),T4MVC 生成的代码被更改并且不再调用操作方法