C sharp, MVC ASP.NET Referência de objeto não definida para uma instância de um objeto.

01/04/2016

Galera é o seguinte, estou criando um projeto (universitário) em ASP.NET MVC.
Primeiro eu criei uma área de administração onde o administrador pode cadastrar produtos, fazer controle de caixa e funcionários. Porém Estou com um problema!
Agora estou querendo exibir na página inicial os produtos cadastrados na área do Administrador e estou tendo o seguinte erro:

Referência de objeto não definida para uma instância de um objeto.

Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da Exceção: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.

Erro de Origem:


Linha 28: </tr>
Linha 29:
Linha 30: @foreach (var item in Model)
Linha 31: {
Linha 32: <tr>


Ou seja ele deve pegar os produtos do controlador que está em administrador, o que eu preciso fazer ? Sei que é chato pedir isso mas se possível preciso com certa urgência:
View do Método sem administrador: Lembrando que essa view não tem controlador e está parecida com a do adm onde vou modificar aos poucos para se parecer mais com vista para o usuário.
@model IEnumerable<Aplicacao_Apresentacao.Areas.Admin.Models.Produto>


@{
    ViewBag.Title = "Produtos";
}

<h2>Index</h2>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Nome)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Valor)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Quantidade)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Promocao)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Foto)
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Nome)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Valor)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Quantidade)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Promocao)
            </td>
            <td>
                <img src="@item.Foto" border="0" width="150" />
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
                @Html.ActionLink("Details", "Details", new { id = item.Id }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.Id })
            </td>
        </tr>
    }

</table>


Controlador do ADM de Produtos:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using Aplicacao_Apresentacao.Areas.Admin.Models;
using Aplicacao_Apresentacao.Models;

namespace Aplicacao_Apresentacao.Areas.Admin.Controllers
{
    public class ProdutosController : Controller
    {
        private BancoASPNETContext db = new BancoASPNETContext();

        // GET: Admin/Produtoes
        public ActionResult Index()
        {
            return View(db.Produtoes.ToList());
        }

        // GET: Admin/Produtoes/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Produto produto = db.Produtoes.Find(id);
            if (produto == null)
            {
                return HttpNotFound();
            }
            return View(produto);
        }

        // GET: Admin/Produtoes/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: Admin/Produtoes/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(Produto produto, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                db.Produtoes.Add(produto);
                db.SaveChanges();

                if (file != null)
                {
                    String[] strName = file.FileName.Split('.');
                    String strExt = strName[strName.Count() - 1];
                    string pathSave = String.Format(".", Server.MapPath("~/Imagens/"), produto.Id, strExt);
                    String pathBase = String.Format("/Imagens/.", produto.Id, strExt);
                    file.SaveAs(pathSave);
                    produto.Foto = pathBase;
                    db.SaveChanges();
                }

                return RedirectToAction("Index");
            }

            return View(produto);
        }

        // GET: Admin/Produtoes/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Produto produto = db.Produtoes.Find(id);
            if (produto == null)
            {
                return HttpNotFound();
            }
            return View(produto);
        }

        // POST: Admin/Produtoes/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(Produto produto, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                db.Entry(produto).State = EntityState.Modified;
                db.SaveChanges();
                if (file != null)
                {
                    if (produto.Foto != null)
                    {
                        if (System.IO.File.Exists(Server.MapPath("~/" + produto.Foto)))
                        {
                            System.IO.File.Delete(Server.MapPath("~/" + produto.Foto));
                        }
                    }
                    String[] strName = file.FileName.Split('.');
                    String strExt = strName[strName.Count() - 1];
                    string pathSave = String.Format(".", Server.MapPath("~/Imagens/"), produto.Id, strExt);
                    String pathBase = String.Format("/Imagens/.", produto.Id, strExt);
                    file.SaveAs(pathSave);
                    produto.Foto = pathBase;
                    db.SaveChanges();
                }
                return RedirectToAction("Index");
            }
            return View(produto);
        }

        // GET: Admin/Produtoes/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Produto produto = db.Produtoes.Find(id);
            if (produto == null)
            {
                return HttpNotFound();
            }
            return View(produto);
        }

        // POST: Admin/Produtoes/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Produto produto = db.Produtoes.Find(id);
            db.Produtoes.Remove(produto);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}

José

Melhor resposta

01/04/2016

Não seria:

@model IEnumerable<Aplicacao_Apresentacao.Areas.Admin.Models.Produtoes>

Jothaz

Responder Citar

Outras Respostas

01/04/2016

José

Infelizmente não deu certo amigo...
Responder Citar

01/04/2016

José

E nem com
@model IEnumerable<Aplicacao_Apresentacao.Areas.Admin.Controllers.ProdutosController>
Responder Citar