我正在努力确定传递给View的模型是否确实有任何记录。
下面的代码循环遍历父记录集,并将父参数传递给子记录集。我已经尝试了if (Model.Content != null)
,但这似乎不起作用,代码只是认为有记录,而实际上还没有。
有人可以查看下面的代码,让我知道我做错了什么吗?
<ul class="nav sf-menu clearfix">
@foreach (var navigation in Model.Navigation)
{
if (Model.Content != null)
{
@Html.SubMenuLink(navigation.Title, navigation.Action, navigation.Controller)
@Html.Raw("<ul>")
foreach (var content in Model.Content.Where(c => c.NavigationId == navigation.Id))
{
if (string.IsNullOrEmpty(content.Url))
{
if (string.IsNullOrEmpty(content.Content1))
{
}
else
{
@Html.MenuLink(content.Title, "Home/Article/" + content.Id + "/" + ToFriendlyUrl(content.Title), "Home");
}
}
else
{
@Html.MenuLink(content.Title, content.Url, "Home");
}
}
@Html.Raw("</ul>")
@Html.Raw("</li>")
}
else
{
@Html.MenuLink(navigation.Title, navigation.Action, navigation.Controller)
}
}
</ul>
非常感谢任何帮助: - )
NavigationViewModel
namespace WebApplication1.Models
{
public class NavigationViewModel
{
public List<Navigation> Navigation { get; set; }
public List<Content> Content { get; set; }
}
}
的HomeController
public ActionResult Navigation()
{
var navigationModel = new NavigationViewModel();
navigationModel.Navigation = (from m in db.Navigations where (m.Main == true) orderby m.Position select m).ToList();
navigationModel.Content = (from n in db.Contents where (n.Active == true) orderby n.Position select n).ToList();
return View(navigationModel);
}
答案 0 :(得分:3)
它可能包含空列表项。更好地检查Count
属性。
if (Model.Content != null && Model.Content.Count>0)
假设Model.Content
可能是IList或Array的类型
答案 1 :(得分:2)
如果Content
属性属于列表或数组类型,请执行以下操作:
if(Model.Content != null && Model.Content.Count > 0)
{
//do something
}
如果某种类型的 IEnumerable 那么:
if(Model.Content != null && Model.Content.Count() > 0)
{
//do something
}
如果您确定Model.Content
不会通过操作方法传递null
,那么您可以使用Any()
:
if(Model.Content.Any())
{
//do something
}
答案 2 :(得分:1)
你可以使用Linq Method Any()
if (Model.Content.Any())
{
}
编辑:第二次看。 if语句可能不正确。循环内的Model.Content将始终以相同的方式执行。你使用它不是navigation.Content.Any()
答案 3 :(得分:1)
Simply you can do something like this
In your C# class introduce new property named called Empty.
public class YourClass
{
public bool Empty
{
get
{
return ( ColumnID== 0 )
}
}
}
Then in your Razor view you can use this Empty property for check weather model has values or not
@if (Model.Empty)
{
@*what ever you want*@
}
else
{
@*what ever you want*@
}
答案 4 :(得分:0)
我的问题是Model.Content最初是将所有记录传递给视图,所以记录确实存在于Where子句foreach (var content in Model.Content.Where(c => c.NavigationId == navigation.Id))
之前,以便根据NavigationID查找相关的内容记录。
我修改了我的代码如下:
<ul class="nav sf-menu clearfix">
@foreach (var navigation in Model.Navigation)
{
int records = Model.Content.Count(c => c.NavigationId == navigation.Id);
if (records > 0)
{
@Html.SubMenuLink(navigation.Title, navigation.Action, navigation.Controller)
@Html.Raw("<ul>")
foreach (var content in Model.Content.Where(c => c.NavigationId == navigation.Id))
{
if (string.IsNullOrEmpty(content.Url))
{
if (string.IsNullOrEmpty(content.Content1))
{
}
else
{
@Html.MenuLink(content.Title, "Home/Article/" + content.Id + "/" + ToFriendlyUrl(content.Title), "Home");
}
}
else
{
@Html.MenuLink(content.Title, content.Url, "Home");
}
}
@Html.Raw("</ul>")
@Html.Raw("</li>")
}
else
{
@Html.MenuLink(navigation.Title, navigation.Action, navigation.Controller)
}
}
</ul>
我不确定这是实现最终目标的最优雅或最有效的方法,任何使代码更有效的建议我很乐意倾听。
答案 5 :(得分:0)
@if (!Model.Any())
{
Response.Redirect("Create");
}
答案 6 :(得分:0)
如果模型为空,则返回空的默认内容将给您您期望的结果
if (!model.Any())
return Content("");