如果用户没有创建列表项,如何显示消息

时间:2016-08-09 10:05:12

标签: c# asp.net-mvc razor

我使用带有asp.net身份的默认Web应用程序mvc 5模板项目。 我有一个Movie.cs模型,并且每个用户都有一个电影列表,所以当你注册时,你可以使用CRUD在列表中添加电影,并在主页上显示它们。

enter image description here

我的viewmodel:

@model MovieApp.ViewModels.UserMovieViewModel
@using MovieApp.Models;

<div class="row" style="margin-top:60px">
    @using (ApplicationDbContext db = new ApplicationDbContext())
    {
        if (db.Users.Any())
        {
            foreach (var _user in Model.ApplicationUser)
            {
                <div class="col-md-4">
                    <div class="panel panel-primary">
                        <div class="panel-heading">
                            <h3 class="panel-title">@_user.UserName</h3>
                        </div>
                        <div class="panel-body">
                            <ul>
                                @foreach (var _movie in _user.Movies.Where(x => x.ApplicationUserID == _user.Id))
                                {
                                    <li>@_movie.MovieName</li>                                        
                                }
                            </ul>
                        </div>
                    </div>
                </div>
            }
        }
        else
        {
            <h2 class="alert alert-danger text-center">No movie lists</h2>
        }
    }

</div>

如果我的用户没有在列表中添加任何电影,那么此行的空格异常错误:

@foreach (var _movie in _user.Movies.Where(x => x.ApplicationUserID == _user.Id))

那么如果用户还没有制作任何电影,如何在每个用户的列表中显示信息(如下图所示)?

enter image description here

3 个答案:

答案 0 :(得分:1)

您可以通过检查.panel-body内是否有任何电影来轻松实现此目的:

<div class="panel-body">
    @if(_user.Movies != null && _user.Movies.Any()) {
        <ul>
            @foreach (var _movie in _user.Movies.Where(x => x.ApplicationUserID == _user.Id)) 
            {
                <li>@_movie.MovieName</li>
            }
        </ul>
    } 
    else 
    {
        <p>No movies...</p>
    }
</div>

答案 1 :(得分:1)

为Movies属性使用支持变量并将其初始化为空列表:

IList<Movie> _movies = new List<Movie>();

然后您的属性定义变为:

IList<Movie> Movies
{
    get
    {
        return _movies;
    }

    set
    {
        _movies = value;
    }
}

这将确保如果用户尚未添加任何电影,则Movies属性将返回一个空的电影列表而不是null。

答案 2 :(得分:0)

只需在视图中添加条件

if (_user.Movies.Any())
{
    your foreach
}
else
{
    your message
}