我可以在foreach中使用html.action吗?

时间:2016-07-05 16:21:28

标签: c# asp.net-mvc razor

我有一种情况,我希望在像这样的视图中的foreach中使用html.action。

<div class="row">
    @foreach (var item in Model.Sections)
    {
       <div class="col-md-8 col-lg-offset-2">
           <div>
               @Html.DisplayFor(modelItem => item.Name)
               @Html.Action("Edit", "Section", new { id = item.SectionId })
           </div>
       </div>
    }
</div>

但是,如果我运行这个,我会在等待异步操作完成时阻止&#34; httpserverutility.execute&#34;错误。我的所有控制器动作都是异步的,所以我认为我做了一些不允许的事情。

3 个答案:

答案 0 :(得分:1)

这实际上取决于你想要完成什么(即你想显示Action的结果吗?你想要一个指向它的链接吗?等等)

渲染动作

如果要渲染已定义操作的结果,则应考虑使用Html.RenderAction()方法:

@Html.DisplayFor(modelItem => item.Name)
@Html.RenderAction("Edit", "Section", new { id = item.SectionId })

提供链接

如果您想呈现指向特定操作的链接(在此方案中似乎更有可能),您应该考虑使用Html.ActionLink()方法:

@Html.DisplayFor(modelItem => item.Name)
@Html.Action("Edit", "Edit", "Section", new { id = item.SectionId }, null)

答案 1 :(得分:0)

我相信您可能正在尝试从视图中呈现异步部分视图。这是我研究中一个颇具争议的问题。在ASP.NET问题上是Issue 601。我相信它已在较新版本的ASP.NET MVC中得到解决。请参阅ASP.NET MVC文档here,看看它是否解决了您的问题。

答案 2 :(得分:-1)

这可以帮到你,

foreach (var item in Model)
{
    <tr>
         <td>
              @Html.DisplayFor(modelItem => item.PGId)
         </td>
         <td>
              @Html.ActionLink("Edit", "Edit", new { id = item.PGId})
         </td>
    </tr>
}