【问题标题】:Can I use html.action within a foreach?我可以在 foreach 中使用 html.action 吗?
【发布时间】: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 在等待异步操作完成时被阻塞”错误。我所有的控制器操作都是异步的,所以我想我做了一些不允许的事情。

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案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>
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 2016-06-11
        • 2019-03-08
        相关资源
        最近更新 更多