【问题标题】:Rendering same partial view multiple times - Only the last partial view is rendered多次渲染相同的局部视图 - 仅渲染最后一个局部视图
【发布时间】:2014-11-12 08:47:07
【问题描述】:

我的一个视图中有以下 sn-p 代码:

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 语句中的局部视图中。所以,这是一个完全不同的问题。部分视图正在渲染,但由于没有内容,它只是空的,断点显然从未被命中。

【问题讨论】:

  • 我建议你看看:stackoverflow.com/questions/11475308/… 并使用 Darin 的回答中提到的编辑器/显示模板的想法,看看是否对你有帮助。
  • @JasonEvans 有没有办法让它在 forloop 中工作?我也尝试了 Html.RenderPartial 替代方案,但它仍然只显示最后一个 Partial 视图。

标签: asp.net-mvc partial-views


【解决方案1】:

我试图复制您的问题,但无济于事。

这是我的主页 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; }
}

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

【讨论】:

  • 嗯。我尝试将部分视图更改为仅包含一个简单的字符串,例如您的。在这种情况下,局部视图现在被渲染两次。所以问题出在局部视图上。我会用部分视图的内容更新我的答案,如果你能看一下,谢谢。
  • 没有问题 :) 很高兴您发现了问题。
  • 究竟是什么问题?
  • @Aravin 根据我对问题 EDIT 的理解(@DSF 随时纠正我),似乎 OP 有一个部分视图,它没有内容,正在渲染。他们得到的印象是局部视图没有被渲染,因为浏览器中没有显示局部视图应该在的位置。但是,部分是空的,因此它没有显示任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多