在MVC3中的循环中渲染部分视图。

问题描述 投票:4回答:6

我有一个很简单的场景,我的视图的模型是一个List。

像这样循环浏览List

@foreach(CustomObject obj in Model)
{
Html.Partial("_TrackingCustomObject",obj)
}

所以我希望根据我的列表有一些局部视图。

局部视图已相应开发。

页面上没有任何错误,只是没有显示任何应该由局部视图显示的数据。它只是不显示任何数据,而这些数据应该由局部视图显示。

不显示任何数据的原因是什么?

asp.net-mvc-3 asp.net-mvc-partialview
6个回答
11
投票

你少了一个@。

@foreach(CustomObject obj in Model)
{
    @Html.Partial("_TrackingCustomObject", obj)
}

但为什么要写foreach循环呢? 你可以用editordisplay模板?就像这样。

@model IEnumerable<CustomObject>
@Html.EditorForModel()

然后简单地定义相应的编辑器模板 (~/Views/Shared/EditorTemplates/CustomObject.cshtml),将自动为您的模型的每个元素渲染。

@model CustomObject
<div>
    @Html.EditorFor(x => x.Foo)
</div>

简单而传统 :-)


0
投票

你缺少了Razor符号 @:

@foreach(CustomObject obj in Model)
{
    @Html.Partial("_TrackingCustomObject",obj)
}

也是 确保 您的部分视图使用的是对象类型 CustomObject 作为模型。

@model MyProject.Models.CustomObject

<h1>Yeah we're in a partial! @Model.SomeProperty </h1>

要尝试并钻研错误所在,可以尝试在PartialView内放置一些静态文本。

<p>Some text</p>

如果你的集合有10个项目,那么你应该看到其中的10个段落。接下来一旦成功了,就集中精力在每个项目中显示一些属性。

@model MyProject.Models.CustomObject

<p>Some text</p>
<p>@Model.SomeProperty</p>

0
投票

当你在创建html表格时,使用 @Html.BeginForm() 你必须把剩下的东西包在一个袋子里。<div> 或其他容器,否则html元素不会被渲染。

例如

这样做是行不通的

@using(Html.BeginForm())
{
  Html.EditorFor(m => m.Name)
}

这样就可以了

@using(Html.BeginForm())
{
   <div>    
      @Html.EditorFor(m => m.Name)
   </div>
}

0
投票

今天有点晚了,但这个在MVC 4中对我来说是有效的。

 @foreach (var p in @Model.RelatedCards)
    {
        Html.RenderPartial("_ThumbPartial", p);
    }

0
投票

这个太老了,但有人可以用它。

@foreach(CustomObject obj in Model)
{
    <text>
        Html.Partial("_TrackingCustomObject",obj)
    </text>
}

0
投票

试试这个:

@Html.RenderPartial("_TrackingCustomObject",obj)
© www.soinside.com 2019 - 2024. All rights reserved.