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

Posted

技术标签:

【中文标题】我可以在 foreach 中使用 html.action 吗?【英文标题】:Can I use html.action within a foreach? 【发布时间】:2016-11-07 13:47:17 【问题描述】:

我有一种情况,我想在这样的视图中的 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>

但是,如果我运行它,我会收到“httpserverutility.execute 在等待异步操作完成时被阻塞”错误。我所有的控制器操作都是异步的,所以我想我做了一些不允许的事情。

【问题讨论】:

【参考方案1】:

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

渲染动作

如果你想渲染定义动作的结果,你应该考虑使用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)

【讨论】:

【参考方案2】:

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

【讨论】:

是的 - 这个。我认为异步在渲染视图上不起作用,但我有一个模糊的记忆,它不起作用。它做了。因此,虽然这可能与您的建议不完全一样——干得好。【参考方案3】:

这对你有帮助,

foreach (var item in Model)

    <tr>
         <td>
              @Html.DisplayFor(modelItem => item.PGId)
         </td>
         <td>
              @Html.ActionLink("Edit", "Edit", new  id = item.PGId)
         </td>
    </tr>

【讨论】:

以上是关于我可以在 foreach 中使用 html.action 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 ConcurrentBag 上使用普通的 foreach 吗?

使用列表时如何在 foreach 中使用 CheckBoxFor? [复制]

forEach 在 nslaoyutconstraints 中的使用

为啥有些 Enumerable 可以在 foreach 中更改,而有些则不能?

在 SwiftUI 中的 ForEach 中绑定

如何在一个 foreach 循环中使用多个条件?