MVC检查视图中的模型是否有记录

时间:2014-05-28 15:26:37

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我正在努力确定传递给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);
}

7 个答案:

答案 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("");