RenderAction中的ActionLink

时间:2009-07-24 11:35:15

标签: c# asp.net-mvc asp.net-mvc-futures

我正在使用RenderAction在我的视图中包含几个“组件”的输出。但是每次我在嵌套动作中使用RenderAction调用ActionLink都会产生错误的路径。 (与RouteLink相同。)如果直接调用操作,则会生成正确的路径。

所以我在父视图的索引操作中多次调用该动作:

<% Html.RenderAction<StateAdminController>(c => c.Index(StateType.Event)); %>  
<% Html.RenderAction<StateAdminController>(c => c.Index(StateType.Booking)); %>  
<% Html.RenderAction<StateAdminController>(c => c.Index(StateType.Communication)); %>  
<% Html.RenderAction<StateAdminController>(c => c.Index(StateType.Payment)); %>  

在嵌套索引视图中,我尝试将ActionLink设置为StateAdminController的Edit方法:

<%= Html.ActionLink<StateAdminController>(c => c.Edit(state.Id), "Bearbeiten") %>  

但是ActionLink指向我父视图的索引动作。

这是一个已知问题吗?我能做错什么吗?从RenderAction调用操作时应该如何完成ActionLink?

提前谢谢你 问候。

勒夫

2 个答案:

答案 0 :(得分:0)

你提到了路线。值得注意的是,当您使用RenderAction时,控制器将被直接调用(即不是来自Url)。因此,它不会通过您的路由表。

答案 1 :(得分:0)

我宁愿将我的视图模型设计为包含所有变体的属性,然后调用RenderPartial()

<% Html.RenderPartial("StateAdmin", Model.Event); %>  
<% Html.RenderPartial("StateAdmin", Model.Booking); %>  
<% Html.RenderPartial("StateAdmin", Model.Communication); %>  
<% Html.RenderPartial("StateAdmin", Model.Payment); %>  

甚至可以使用我自己的扩展方法来浏览集合并为每个集合调用RenderPartial()

<% Html.RenderPartials("StateAdmin", Model.StateTypes); %>  

虽然RenderAction()可以解决问题,但从视图中调用和渲染操作对我来说似乎有点不对劲。视图已经是一个动作的结果。