多次渲染相同的局部视图 - 仅渲染最后的局部视图

时间:2014-11-12 08:47:08

标签: asp.net-mvc partial-views

我的一个观点中有以下代码片段:

foreach (var topEmployer in Model.TopEmployers)
{
    //Some link - works fine for all iterations
    @Html.ActionLink(....)

    //This partial view is only rendered for the LAST iteration of this loop.
    @Html.Partial("partialViewName", topEmployer)   
    <br />     
}

使用调试器逐步执行循环,其中我在局部视图中有断点确认问题:调试器仅在最后一次迭代时进入部分视图而不是之前的任何部分视图。好像它只是忽略了之前迭代的局部视图。

我不确定如何解决这个问题。试图寻找类似的问题,但没有运气。我做错了什么?

编辑:好的,我将断点放在未输入的if语句的局部视图中。所以,这是一个完全不同的问题。部分视图正在呈现,但由于没有内容,它只是空的,断点显然从未被击中。

1 个答案:

答案 0 :(得分:2)

我试图复制你的问题,但没有用。

这是我的主页Index.cshtml

@model PartialViewForLoop.Controllers.IndexViewModel
@{
    ViewBag.Title = "Home Page";
}

@{
    foreach (var topEmployer in Model.TopEmployers)
    {
        //This partial view is only rendered for the LAST iteration of this loop.
        @Html.Partial("partialViewName", topEmployer)
        <br />
    }
}

部分视图

@model string

Hello @Model

和控制器代码:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var vm = new IndexViewModel();
            vm.TopEmployers.Add("Mr Tim Jones");
            vm.TopEmployers.Add("Mr David Smith");

            return View(vm);
        }
    }

public class IndexViewModel
{
    public IndexViewModel()
    {
        TopEmployers = new List<string>();
    }

    public IList<string> TopEmployers { get; set; }
}

当我渲染索引视图时,for循环执行两次,对于每个名称,渲染局部视图。在你的例子中,我不明白为什么局部视图只被渲染一次。