(为标题道歉..很难确定)
我有一种情况,控制器将构建一个列表,其中将包含一组从抽象基类派生的 ViewModel。然后我使用显示模板适当地呈现内容,但是当我导航到 url 时,它似乎将整个内容呈现两次。这是我的代码
public abstract class AbstractItemViewModel
{
}
public class TypeAViewModel : AbstractItemViewModel
{
public int ID { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
public class TypeBViewModel : AbstractItemViewModel
{
public string Title { get; set; }
public List<string> Items { get; set; }
}
然后我的控制器就这样构建了一个测试用例。
public class HomeController : BaseController
{
// GET: Home
public ActionResult Index()
{
List<AbstractItemViewModel> items = new List<AbstractItemViewModel>();
items.Add(new TypeAViewModel() { ID = 1, Title = "Test A", Body = "This is some body content." });
items.Add(new TypeBViewModel() { Title = "Test B", Items = new List<string>() { "Line 1", "Line 2", "Line 3" } });
return View(items);
}
}
...为了完整起见,这里是基本控制器类(没什么特别的)..
public class BaseController : Controller
{
}
..这是视图...
@using xxx.ViewModels
@model List<AbstractItemViewModel>
@{
ViewBag.Title = "Home";
}
<h1>@Model.Count()</h1>
<div class="container">
<div class="row">
@foreach (AbstractItemViewModel item in Model)
{
<div class="col-xs-12">
@Html.DisplayForModel(item)
</div>
<p>space</p>
}
</div>
</div>
.. 和 2 个显示模板 TypeAViewModel.cshtml
@using xxx.ViewModels
@model TypeAViewModel
<h2>@Model.Title (@Model.ID)</h2>
<p>@Model.Body</p>
.. 和 ... TypeBViewModel.cshtml
@using xxx.ViewModels
@model TypeBViewModel
<h2>@Model.Title</h2>
<ul>
@foreach (string s in Model.Items)
{
<li>@s</li>
}
</ul>
作为我得到的输出。
2
测试 A (1) 这是一些正文内容。
测试 B 第 1 行 第 2 行 第 3 行空格
测试 A (1) 这是一些正文内容。
测试 B 第 1 行 第 2 行 第 3 行空格
如您所见,它似乎将整个事物渲染了两次。我已经放置了一个断点并单步执行索引视图,绝对不会重复循环。有人看到我错过了什么吗?