【发布时间】:2016-02-03 15:22:48
【问题描述】:
我有以下剃须刀代码:
<div class="panel panel-default col-xs-10 col-sm-10 col-md-10 col-lg-10">
<div class="panel-body">
@if (Model != null)
{
var m = Model.Requests.FileData.OrderBy(p => p.FileName);
if (m.Count() > 0)
{
foreach (var item in m)
{
if (Model.data.ToLower().Contains("dns"))
{
<div class="row">
<span>
@Html.DisplayFor(mi => item.FileName, new { @class = "form-label" })
<span class="glyphicon glyphicon-trash"></span>
</span>
</div>
}
}
}
}
</div>
</div>
这是一个显示数据库中已上传文件的面板。 选择文件后,控制器将其放入数据库,然后返回包含上述代码的部分视图。
当我调试应用程序并单步执行上述代码时,它会做它应该做的事情,但是当我查看渲染页面的 html 时,面板是空的。
渲染页面:
<div class="panel panel-default col-xs-10 col-sm-10 col-md-10 col-lg-10">
<div class="panel-body">
</div>
</div>
我在这里缺少什么,为什么没有呈现 html?
[编辑]
断点:
我发现只有第二个 IF 部分中的所有内容都不是渲染元素。
使用这个:
<span class="form-label">@item.FileName</span>
也不渲染任何东西。
[编辑]
将视图模型更改为具有名为 List FileData 的属性并将数据加载到其中。
然后将 Razor 更改为从中读取。
<div class="panel panel-default col-xs-10 col-sm-10 col-md-10 col-lg-10">
<div class="panel-body">
@if (Model != null && Model.FileData != null && Model.FileData.Any())
{
var m = Model.FileData.OrderBy(p => p.FileName);
foreach (var item in m.ToList())
{
<div class="row">
<span>
<span class="form-label">@item.FileName</span>
<span class="glyphicon glyphicon-trash"></span>
</span>
</div>
}
}
</div>
</div>
很遗憾,仍然没有渲染。
【问题讨论】:
-
这表明
Model.Requests.FileData.OrderBy(p => p.FileName)产生一个空集合或者Model.data.ToLower().Contains("dns")是false。假设您已确保这些都没有发生? -
你能确认调试时第二个“if”语句中的断点被命中了吗?
-
您为什么使用 DisplayFor?在跨度上设置类并在跨度内使用 item.FileName ...另外,一个好的编码标准是使用 if(m.Any()) 而不是 (m.Count() > 0)。
-
我同意@spender 的评论。如果您实际上正在执行循环,我们至少会在呈现的 HTML 中看到静态 HTML(例如
<span class=glyphicon ...)。我想知道问题是否出在您的if声明上。您在item中有一个集合成员,但if语句正在检查Model.data。也许发布填充模型的控制器代码会有所帮助。附言在循环之前检查集合中是否有东西是完全没有必要的。如果它是空的,你将不会进入循环。删除m.Count() > 0检查。 -
ata.ToLower().Contains("dns")是真还是假?
标签: c# html asp.net-mvc asp.net-mvc-4 razor