Usuário com melhor resposta
Problema ao retorna uma lista em um json

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 é
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
- Sugerido como Resposta William John Adam TrindadeModerator sexta-feira, 2 de novembro de 2012 14:24
- Marcado como Resposta Atila Rampazo domingo, 4 de novembro de 2012 00:40
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
- Sugerido como Resposta William John Adam TrindadeModerator sexta-feira, 2 de novembro de 2012 14:24
- Marcado como Resposta Atila Rampazo domingo, 4 de novembro de 2012 00:40
-
-
-
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 é
-
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
-
-