MVC DisplayFor 不渲染
MVC DisplayFor Not Rendering
我在使用 MVC 5 应用程序中的自定义显示模板时遇到问题。我有一个视图模型,其中包含一个我想重用的复杂类型。我创建了 DisplayTemplates 文件夹并放置了一个遵循正确命名约定的局部视图。一切似乎都正常工作,部分视图被调用,但浏览器上没有呈现任何内容。
我已经检查了呈现的 html 以确保它没有被隐藏或显示为搞笑,但实际上 html 输出中没有呈现任何内容。请参阅下面的相关屏幕截图。我究竟做错了什么?谢谢。
文件夹结构
这是初始视图。 viewmodel 有一个 AvailableOption 列表。 foreach调用displayfor
@model CustomerWebPortal.ViewModels.OrderVehicle
@using (Html.BeginForm("CreateOrder", "Home"))
{
<h2>@Html.DisplayFor(x => x.DisplayName)</h2>
<div class="description">
<ul>
@Html.Raw(Model.Description)
</ul>
</div>
<h3>Available Options</h3>
<hr />
<div>
@foreach (var option in Model.AvailableOptions)
{
Html.DisplayFor(x => option, "AvailableOption");
}
</div>
<h3>Customer</h3>
<hr />
<div class="customerInfo">
@Html.LabelFor(x => x.Customer)
@Html.TextBoxFor(x => x.Customer)
@Html.ValidationMessageFor(x => x.Customer)
</div>
<div class="actions">
<input type="submit" value="Place Order" />
</div>
@Html.HiddenFor(x => x.VehicleId)
@Html.HiddenFor(x => x.Price)
}
这里是复杂类型的部分视图
@model CustomerWebPortal.ViewModels.AvailableOption
<div class="row-fluid padtopbottom5">
<div class="span6">
<div class="row-fluid">
<div class="span4">
@Html.CheckBoxFor(x => x.Selected)
</div>
</div>
</div>
<div class="span6">
<div class="row-fluid">
<div class="span4">
<h3>@Html.DisplayFor(x => x.DisplayName)</h3>
<ul>
@Html.Raw(Model.Description)
</ul>
<p><strong>@Html.DisplayFor(x => x.Price)</strong></p>
</div>
</div>
</div>
</div>
这里是复杂类型调用displayfor的foreach
这是渲染结果HTML
我创建了一个小的测试项目,如果有人想看的话,可以重现错误。 Sample Project
这在问题的评论中,但我使用 Html.Raw 编写了一个小型测试应用程序,显然它也应该可以解决您的问题。它只需要在 Html.DisplayFor
前面加一个“@”
ViewModel(在我的例子中,你的垃圾数据)
public class IndexViewModel
{
private IEnumerable<string> _avlOpt;
public IEnumerable<string> AvailableOptions
{
get { return _avlOpt; }
set { _avlOpt = value; }
}
public IndexViewModel()
{
List<string> lstString = new List<string>();
for (int i=1;i<5;i++)
{
lstString.Add(@"<h" + i.ToString() + ">Test</h" + i.ToString() + ">");
}
AvailableOptions = lstString;
}
}
查看
test<br/>
@foreach (var option in Model.AvailableOptions)
{
@Html.Raw(option);
}
<br/>end test
查看结果(来源 - 不带“@” - Html.Raw(选项))
<div>
test<br/>
<br/>end test
</div>
查看结果(来源 - 带“@” - @Html.Raw(选项))
<div>
test<br/>
<h1>Test</h1><h2>Test</h2><h3>Test</h3><h4>Test</h4> <br/>end test
</div>
如果您像我一样是个笨蛋,请确保您没有为值类型创建空白的 DisplayTemplate。
在我的例子中,我正在尝试一些东西并且分心了,在名为 string.cshtml 的 DisplayTemplates 文件夹中留下了一个空文件,然后在接下来的一个小时里 return 试图找出我的值停止的原因正在显示。
不要那样做
我在使用 MVC 5 应用程序中的自定义显示模板时遇到问题。我有一个视图模型,其中包含一个我想重用的复杂类型。我创建了 DisplayTemplates 文件夹并放置了一个遵循正确命名约定的局部视图。一切似乎都正常工作,部分视图被调用,但浏览器上没有呈现任何内容。
我已经检查了呈现的 html 以确保它没有被隐藏或显示为搞笑,但实际上 html 输出中没有呈现任何内容。请参阅下面的相关屏幕截图。我究竟做错了什么?谢谢。
文件夹结构
这是初始视图。 viewmodel 有一个 AvailableOption 列表。 foreach调用displayfor
@model CustomerWebPortal.ViewModels.OrderVehicle
@using (Html.BeginForm("CreateOrder", "Home"))
{
<h2>@Html.DisplayFor(x => x.DisplayName)</h2>
<div class="description">
<ul>
@Html.Raw(Model.Description)
</ul>
</div>
<h3>Available Options</h3>
<hr />
<div>
@foreach (var option in Model.AvailableOptions)
{
Html.DisplayFor(x => option, "AvailableOption");
}
</div>
<h3>Customer</h3>
<hr />
<div class="customerInfo">
@Html.LabelFor(x => x.Customer)
@Html.TextBoxFor(x => x.Customer)
@Html.ValidationMessageFor(x => x.Customer)
</div>
<div class="actions">
<input type="submit" value="Place Order" />
</div>
@Html.HiddenFor(x => x.VehicleId)
@Html.HiddenFor(x => x.Price)
}
这里是复杂类型的部分视图
@model CustomerWebPortal.ViewModels.AvailableOption
<div class="row-fluid padtopbottom5">
<div class="span6">
<div class="row-fluid">
<div class="span4">
@Html.CheckBoxFor(x => x.Selected)
</div>
</div>
</div>
<div class="span6">
<div class="row-fluid">
<div class="span4">
<h3>@Html.DisplayFor(x => x.DisplayName)</h3>
<ul>
@Html.Raw(Model.Description)
</ul>
<p><strong>@Html.DisplayFor(x => x.Price)</strong></p>
</div>
</div>
</div>
</div>
这里是复杂类型调用displayfor的foreach
这是渲染结果HTML
我创建了一个小的测试项目,如果有人想看的话,可以重现错误。 Sample Project
这在问题的评论中,但我使用 Html.Raw 编写了一个小型测试应用程序,显然它也应该可以解决您的问题。它只需要在 Html.DisplayFor
前面加一个“@”ViewModel(在我的例子中,你的垃圾数据)
public class IndexViewModel
{
private IEnumerable<string> _avlOpt;
public IEnumerable<string> AvailableOptions
{
get { return _avlOpt; }
set { _avlOpt = value; }
}
public IndexViewModel()
{
List<string> lstString = new List<string>();
for (int i=1;i<5;i++)
{
lstString.Add(@"<h" + i.ToString() + ">Test</h" + i.ToString() + ">");
}
AvailableOptions = lstString;
}
}
查看
test<br/>
@foreach (var option in Model.AvailableOptions)
{
@Html.Raw(option);
}
<br/>end test
查看结果(来源 - 不带“@” - Html.Raw(选项))
<div>
test<br/>
<br/>end test
</div>
查看结果(来源 - 带“@” - @Html.Raw(选项))
<div>
test<br/>
<h1>Test</h1><h2>Test</h2><h3>Test</h3><h4>Test</h4> <br/>end test
</div>
如果您像我一样是个笨蛋,请确保您没有为值类型创建空白的 DisplayTemplate。
在我的例子中,我正在尝试一些东西并且分心了,在名为 string.cshtml 的 DisplayTemplates 文件夹中留下了一个空文件,然后在接下来的一个小时里 return 试图找出我的值停止的原因正在显示。
不要那样做