NullReferenceException в MVC

1

Я действительно новичок в С#, но мне нужно руководствоваться. У меня есть сайт MVC, который использует соединение с базой данных (через структуру сущности) для отслеживания проектов и задач, связанных с каждым из них. Первый экран отображает список проектов и всю информацию для них очень хорошо, но когда я нажимаю ссылку, чтобы открыть список задач проекта, она запускает ошибку NullreferenceException, и я не могу понять, как ее исправить, Я понимаю концепцию ошибки и почему, я просто не вижу, как она применима к этой конкретной ошибке.

Вот мой index.cshtml:

@{
      ViewBag.Title = "Tasks of Project 1";
}

@model IEnumerable<IntelliBase.Models.Task>

@{  Layout = null; }

...
...
...

<!--Task Grid-->
<div id="task-grid" class="table">
    <div class="table-header">         
        <span class="thCell ">ID</span>
        <span class="thCell ">Due Date</span>
        <span class="thCell ">Department</span>
        <span class="thCell ">Task Description</span>
        <span class="thCell ">Activity</span>

    </div>
    <div class="table-body">
        @foreach (var taskitem in Model)
        {
            <div class="row rowzibra">
                <span class="cell"><a href="../home/"><span class="drill-icon ui-icon ui-icon-zoomin"></span></a></span>
                <span class="cell"><a href="../home/">@Html.DisplayFor(modelItem => taskitem.TaskDueDate)</a></span>
                <span class="cell">@Html.DisplayFor(modelItem => taskitem.TaskDescription)</span>
                <span class="cell activity-link ">
                    <a href="javascript:editDialog()"><span class="edit-icon ui-icon ui-icon-pencil "></span>Edit</a>&nbsp;
                    <a href="javascript:deleteDialog('@Html.DisplayFor(modelItem => taskitem.TaskID)')"><span class="delete-icon ui-icon ui-icon-trash"></span>Delete</a>
                    <a href="javascript:detailsDialog()"><span class="drill-icon ui-icon ui-icon-note"></span>Details</a>
                </span>
            </div>
        }
        <div class="table-footer">
            <span>&nbsp;</span>
        </div>
    </div>
</div>

Ошибка возникает в "Модели" в строке @foreach (var taskitem in Model).

Модель: TaskPartial.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace IntelliBase.Models
{
    public partial class Task
    {

    }
}

Контроллер: HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;
using System.Diagnostics;

namespace IntelliBase.Controllers
{
    public class HomeController : Controller
    {

        Models.IntelliBaseEntities db = new Models.IntelliBaseEntities();

    }
}

Страница cshtml для проектов использует ту же методологию для отображения элементов проекта из фреймворка сущности и, кажется, работает очень хорошо, но попытка использовать вышеуказанный код для отображения задач для проекта не будет. Я понятия не имею, почему "Модель" на странице проектов отлично работает, а "Модель" на странице "Задачи" запускает ошибку NullReferenceException. Я был бы очень признателен за любую помощь! Заранее спасибо!

@mfanto: вот полный контроллер:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;
using System.Diagnostics;

namespace IntelliBase.Controllers
{
    public class HomeController : Controller
    {

        Models.IntelliBaseEntities db = new Models.IntelliBaseEntities();

        public ActionResult EFtest()
        {

            IntelliBase.Models.IntelliBaseEntities db = new Models.IntelliBaseEntities();          

            return View();
        }
        public ActionResult Test()
        {
            // sample for network folder access 
            // via windows explorer

            string path = @"\\SERVER2011";
            Process.Start("explorer.exe",path);


            return View();
        }
        public ActionResult Index()
        {
            ViewBag.Title = "Tasks";            
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }


        public ActionResult Search()
        {
            ViewBag.Title = "Search Tasks";

            return View();
        }
        public ActionResult SearchResults()
        {
            ViewBag.Title = "Search Results";
            return View();
        }
    }
}
  • 4
    Можете выложить полный контроллер? Если Model имеет значение null, это означает, что вы не устанавливаете Model в действии вашего контроллера
  • 0
    @mfanto: как мне это сделать?
Показать ещё 4 комментария
Теги:
entity-framework
asp.net-mvc

1 ответ

2
Лучший ответ

Если модель равна NULL, значит, вы не устанавливаете ее внутри действия ваших контроллеров. Ваш код должен выглядеть примерно так:

public ActionResult EFtest()
{
    IntelliBase.Models.IntelliBaseEntities db = new Models.IntelliBaseEntities();          

    var items = db.Tasks.ToList();

    return View(items);
}

Это приведет к тому, что модель будет равна списку элементов

Ещё вопросы

Сообщество Overcoder
Наверх
Меню