none
Problema ao retorna uma lista em um json RRS feed

  • Pergunta

  • Boa Tarde!

    Estou estudando json com MVC e estou tendo o seguinte erro

    Error 1 Instance argument: cannot convert from 'System.Data.Entity.DbSet<EstudoMVC.Models.Materias>' to 'System.Linq.ParallelQuery<string>' D:\Material Estudo\EstudoMVC\EstudoMVC\Controllers\MateriasController.cs 104 28 EstudoMVC

    Error 2 'System.Data.Entity.DbSet<EstudoMVC.Models.Materias>' does not contain a definition for 'Contains' and the best extension method overload 'System.Linq.ParallelEnumerable.Contains<TSource>(System.Linq.ParallelQuery<TSource>, TSource)' has some invalid arguments D:\Material Estudo\EstudoMVC\EstudoMVC\Controllers\MateriasController.cs 104 28 EstudoMVC

    Minha Controller está assim o metodo em questão é o Buscar

    using System.Data;
    using System.Linq;
    using System.Web.Mvc;
    using EstudoMVC.Models;
    
    namespace EstudoMVC.Controllers
    {
        public class MateriasController : Controller
        {
            private Estudo_MVC_DataContext db = new Estudo_MVC_DataContext();
    
            //
            // GET: /Materias/
    
            public ViewResult Index()
            {
                return View(db.Materia.ToList());
            }
    
            //
            // GET: /Materias/Details/5
    
            public ViewResult Details(int id)
            {
                Materias materias = db.Materia.Find(id);
                return View(materias);
            }
    
            //
            // GET: /Materias/Create
    
            public ActionResult Create()
            {
                return View();
            }
    
            //
            // POST: /Materias/Create
    
            [HttpPost]
            public ActionResult Create(Materias materias)
            {
                if (ModelState.IsValid)
                {
                    db.Materia.Add(materias);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
    
                return View(materias);
            }
    
            //
            // GET: /Materias/Edit/5
    
            public ActionResult Edit(int id)
            {
                Materias materias = db.Materia.Find(id);
                return View(materias);
            }
    
            //
            // POST: /Materias/Edit/5
    
            [HttpPost]
            public ActionResult Edit(Materias materias)
            {
                if (ModelState.IsValid)
                {
                    db.Entry(materias).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(materias);
            }
    
            //
            // GET: /Materias/Delete/5
    
            public ActionResult Delete(int id)
            {
                Materias materias = db.Materia.Find(id);
                return View(materias);
            }
    
            //
            // POST: /Materias/Delete/5
    
            [HttpPost, ActionName("Delete")]
            public ActionResult DeleteConfirmed(int id)
            {
                Materias materias = db.Materia.Find(id);
                db.Materia.Remove(materias);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
    
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Buscar(string Materia)
            {
    
                try
                {
                   return Json(db.Materia.Contains(Materia));
                }
                catch (System.Exception)
                {
    
                    return View();
                }
    
            }
    
            protected override void Dispose(bool disposing)
            {
                db.Dispose();
                base.Dispose(disposing);
            }
        }
    }

    Minha Model

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations;
    
    namespace EstudoMVC.Models
    {
        public class Materias
        {
            public int ID { get; set; }
            [Required(ErrorMessage = "Favor informar a Máteria")]
            [StringLength(150, ErrorMessage = "A Materia deve conter no máximo 150 caracteres")]
            public string Materia { get; set; }
        }
    }

    Será que alguem poderia me dar uma ideia?

    Obrigado!


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    quinta-feira, 1 de novembro de 2012 16:09

Respostas

Todas as Respostas

  • Você tem que usar o Where nesse caso:

    db.Materia.Where(m => m.Materia.Contains(Materias)).


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 1 de novembro de 2012 16:17
  • Conseguiu?

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 1 de novembro de 2012 16:56
  • Vou tentar aqui e ja te falo... vlw

    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    quinta-feira, 1 de novembro de 2012 17:12
  • Murilo, essa parte deu certo porem me surgiu uma duvida, quando eu clico no link que deveria me levar a página de busca ele da 404 que nao localizou a pagina, porem ta tudo correto.

    Vou postar aqui

    Buscas.cshtml

    @model IEnumerable<EstudoMVC.Models.Materias>
    @{
        ViewBag.Title = "Buscar";
    }
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/Customers.js")" type="text/javascript"></script>
    <h2>
        Buscar</h2>
    @using (Ajax.BeginForm(new AjaxOptions
    {
        Url = "Materias/Buscar",
        OnSuccess = "Sucess",
        UpdateTargetId = "divJson"
    }))
    {
        <div class="editor-label">
            @Html.Label("Materia")
        </div>
        <div class="editor-field">
            @Html.TextBox("Buscar")
        </div>
        <p>
            <input type="submit" value="Buscar" />
        </p>
        
        <div id="divResult">
        </div>
        
        <label for="divJson">
            Retyorno do servidor (formato Json).</label>
        <div id="divJson" style="background-color: #CAF3FF">
        </div>
    }

    MateriasController

    using System.Data;
    using System.Linq;
    using System.Web.Mvc;
    using EstudoMVC.Models;
    
    namespace EstudoMVC.Controllers
    {
        public class MateriasController : Controller
        {
            private Estudo_MVC_DataContext db = new Estudo_MVC_DataContext();
    
            //
            // GET: /Materias/
    
            public ViewResult Index()
            {
                return View(db.Materia.ToList());
            }
    
            //
            // GET: /Materias/Details/5
    
            public ViewResult Details(int id)
            {
                Materias materias = db.Materia.Find(id);
                return View(materias);
            }
    
            //
            // GET: /Materias/Create
    
            public ActionResult Create()
            {
                return View();
            }
    
            //
            // POST: /Materias/Create
    
            [HttpPost]
            public ActionResult Create(Materias materias)
            {
                if (ModelState.IsValid)
                {
                    db.Materia.Add(materias);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
    
                return View(materias);
            }
    
            //
            // GET: /Materias/Edit/5
    
            public ActionResult Edit(int id)
            {
                Materias materias = db.Materia.Find(id);
                return View(materias);
            }
    
            //
            // POST: /Materias/Edit/5
    
            [HttpPost]
            public ActionResult Edit(Materias materias)
            {
                if (ModelState.IsValid)
                {
                    db.Entry(materias).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(materias);
            }
    
            //
            // GET: /Materias/Delete/5
    
            public ActionResult Delete(int id)
            {
                Materias materias = db.Materia.Find(id);
                return View(materias);
            }
    
            //
            // POST: /Materias/Delete/5
    
            [HttpPost, ActionName("Delete")]
            public ActionResult DeleteConfirmed(int id)
            {
                Materias materias = db.Materia.Find(id);
                db.Materia.Remove(materias);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
    
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Buscar(string Materia)
            {
                try
                {
                    return Json(db.Materia.Where(m => m.Materia.Contains(Materia)));
                }
                catch (System.Exception)
                {
                    return View();
                }
            }
            protected override void Dispose(bool disposing)
            {
                db.Dispose();
                base.Dispose(disposing);
            }
        }
    }

    e o js

    //<reference path="jquery-1.5.1.js" />
    
    function Sucess(ajaxContext) {
        var table = "";
        //Recupera o retorno do servidor
        var retorno = ajaxContext.get_data();
    
        //Verifica se existe retorno
        if (retorno) {
            //Limpa a div
            $("divResult").empty();
    
            //Adicionar tabela na div para exibir o resultado
    
            table = "<table id='tableResult'><tr><th>Materia</th></tr></table>";
            $("divResult").append(table);
    
            //adiciona tr para cada item retornado
    
            $(eval(retorno)).each(function () {
                $("tableResult").append("<tr><td>"
                    + this.Materia + "</td></tr>");
            });
        }
    }

    Não sei o que pode estar ocorrendo!


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    quinta-feira, 1 de novembro de 2012 20:31
  • Isso acontece porque quando você clica em um link o seu navegador faz um GET, porem no seu controller não existe uma action Buscas sendo GET.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    • Sugerido como Resposta eeeeeeeeeeeeee5 sábado, 3 de novembro de 2012 21:41
    quinta-feira, 1 de novembro de 2012 21:27
  • Devo fazer parecido, como é feito no create ? um get e depois um post?

    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    sexta-feira, 2 de novembro de 2012 11:06
  • Sim.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    sexta-feira, 2 de novembro de 2012 11:16