我可以在 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 中的使用