System.NullReferenceException:System.Web.Mvc.WebViewPage <T> .Model.get返回空

时间:2020-06-06 14:41:44

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

我是MVC的初学者,试图创建一个页面...我的数据库中有三个表...我正在使用Entity Framework DB的第一种方法,并将这三个表创建为“模型”文件夹下的类...我还创建了一个名为“ AllClasses”的新类,并在该新类中定义了这三个类中的每一个... 我正在尝试从“ tblCharacter”表“ CharacterImageURL”列中获取3张图片... 当我运行代码“ return View(myclass)”时,出现错误=> System.NullReferenceException:System.Web.Mvc.WebViewPage.Model.get返回null ... 问题是return View(myclass);返回NULL ...所以问题出在我的控制器上,我想...

我知道没有适用于我的解决方案的类似问题...

这是我的控制器部分:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using StarWars.Models;
    namespace StarWars.Controllers
    {
        public class HomeController : Controller
        {
            StarWarsFunClubDBEntities myobject = new StarWarsFunClubDBEntities();
            public ActionResult Index()
            {
                return View();
            }

            public ActionResult SWHome()
            {

                var myclass = new AllClasses();
                myclass.Avatars = myobject.tblAvatars.ToList();
                myclass.Characters = myobject.tblCharacters.ToList();
                myclass.Comments = myobject.tblComments.ToList();
                return View(myclass);
            }

        }
    }

这是我的主页SWHome.cshtml

@model  StarWars.Models.AllClasses


@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>SWHome</title>
    <link rel="stylesheet" type="text/css" href="~/Content/css.css" />
</head>
<body>
    <div class="box">
        <div class="header">
            <div class="logo"> <img src="~/images/Star_Wars_Logo.png" alt="Alternate Text" /> </div>
            <div class="sitename"><h4>Star Wars Fun Club</h4></div>
        </div>
        <div class="question"><h5>What do you think about the new characters of Star Wars: The Force Awakens(2015)?</h5></div>
        <div class="photo">
            <div class="innerphoto">
                 @foreach (var item in Model.Characters)
            {
                <img src="@item.CharacterImageURL" alt="" />
            }


            </div>
        </div>
        <div class="comment"></div>
        <div class="addcomment"></div>
        <div class="footer"></div>



    </div>

</body>
</html>

这些是我通过EF DB First帮助自动生成的类

 namespace StarWars.Models
    {
        using System;
        using System.Collections.Generic;

        public partial class tblAvatar
        {
            public int AvatarID { get; set; }
            public string AvatarName { get; set; }
            public string AvatarImageURL { get; set; }
        }
    }


namespace StarWars.Models
{
    using System;
    using System.Collections.Generic;

    public partial class tblComment
    {
        public int CommentID { get; set; }
        public string Expression { get; set; }
        public System.DateTime DateTime { get; set; }
        public int AvatarID { get; set; }
    }
}


namespace StarWars.Models
{
    using System;
    using System.Collections.Generic;

    public partial class tblCharacter
    {
        public int CharacterID { get; set; }
        public string CharacterName { get; set; }
        public string CharacterImageURL { get; set; }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using StarWars.Models;
using StarWars.Controllers;
using System.Data.Entity;

namespace StarWars.Models
{
    public class AllClasses
    {
        public IEnumerable<tblAvatar> Avatars { get; set; }
        public IEnumerable<tblCharacter> Characters { get; set; }
        public IEnumerable<tblComment> Comments { get; set; }

    }
}

2 个答案:

答案 0 :(得分:0)

您使用方法SWHome()返回了对象AllClasses,但是您的视图除外了List<AllClasses>

也许这是为您提供的解决方案:

@model StarWars.Models.AllClasses

代替

@model  List<StarWars.Models.AllClasses>

以及图片的解决方案:

@foreach (var Character in Model.Characters)
{
   @if (Character.CharacterImageURL != null) 
   {
      <img src="@Character.CharacterImageURL" alt="" />
   }
}

或没有空检查:

@foreach (var Character in Model.Characters)
{
   <img src="@Character.CharacterImageURL" alt="" />
}

答案 1 :(得分:0)

您在视图中有List<StarWars.Models.AllClasses>,但是您正在从方法AllClasses返回SWHome

根据您的情况,您需要使用@model StarWars.Models.AllClasses

删除视图中的foreach循环。并直接访问该属性。 Model.Characters

相关问题