2016-07-05 136 views
1

我有一种情况,我想在这样的视图内的foreach中使用html.action。我可以在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被阻止”错误。我所有的控制器动作都是异步的,所以我想我做了一些不被允许的事情。

回答

0

我相信你可能试图从视图中渲染异步部分视图。从我的研究来看,这是一个相当有争议的问题。在ASP.NET问题上是Issue 601。我相信它已经在新版本的ASP.NET MVC中得到解决。请参阅ASP.NET MVC文档here并查看它是否解决了您的问题。

+0

是的 - 这。我认为异步不适用于渲染的视图,但我有一个模糊的记忆,它不会工作。它做了。所以虽然这可能不完全是你的建议 - 很好的工作。 – round

-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> 
} 
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) 
相关问题