none
Duvida resgatar dados formulário RRS feed

  • Pergunta

  • Amigos boa tarde!

    Tenho um formulário de cadastro de produtos onde eu utilizo o esquema de dropdown em cascata para popular a subcategoria de um produto.

    Porem não estou conseguindo recuperar esse valor para poder gravar na minha base de dados, será que alguem poderia me ajudar?

    Vou postar os codigos aqui.. Obrigado

    MODEL

            public int ID { get; set; }
            [Display(Name = "Produto")]
            public string NomeProduto { get; set; }
            public decimal Valor { get; set; }
            public int Estoque { get; set; }
    
            public virtual Categoria Categoria { get; set; }

    Controller

    using CF.Models;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace CF.Controllers
    {
        public class ProdutoController : Controller
        {
            //
            // GET: /Produto/
            private MyContext db = new MyContext();
            public ActionResult Index()
            {
    
                return View(db.Produtos.ToList());
            }
    
            //
            // GET: /Produto/Details/5
    
            public ActionResult Details(int id)
            {
                return View(db.Produtos.Find(id));
            }
    
            //Retorna todas as subcategorias de uma categoria
            public JsonResult ListaSubCategorias(int id)
            {
                var subcategoria = db.Categorias.Where(c => c.IDCategoriaPai == id);
                return Json(new SelectList(subcategoria.ToArray(), "ID", "NomeCategoria"), JsonRequestBehavior.AllowGet);
            }
    
    
            //
            // GET: /Produto/Create
    
            public ActionResult Create()
            {
                var query = db.Categorias.Where(x => x.IDCategoriaPai == 0);
                ViewBag.categoria = new SelectList(query.AsEnumerable(), "ID", "NomeCategoria");
                return View();
            }
    
            //
            // POST: /Produto/Create
    
            [HttpPost]
            public ActionResult Create(Produto produto, FormCollection form)
            {
                try
                {
                    if (ModelState.IsValid)
                    {
    
                        db.Produtos.Add(produto);
                        db.SaveChanges();
                        return RedirectToAction("Index");
                    }
                    return View();
                }
                catch
                {
                    return View();
                }
            }
    
            //
            // GET: /Produto/Edit/5
    
            public ActionResult Edit(int id)
            {
                return View(db.Produtos.Find(id));
            }
    
            //
            // POST: /Produto/Edit/5
    
            [HttpPost]
            public ActionResult Edit(Produto produto)
            {
                try
                {
                    if (ModelState.IsValid)
                    {
                        db.Entry(produto).State = EntityState.Modified;
                        db.SaveChanges();
                        return RedirectToAction("Index");
    
                    }
                    return View();
                }
                catch
                {
                    return View();
                }
            }
    
            //
            // GET: /Produto/Delete/5
    
            public ActionResult Delete(int id)
            {
                return View(db.Produtos.Find(id));
            }
    
            //
            // POST: /Produto/Delete/5
    
            [HttpPost, ActionName("Delete")]
            public ActionResult DeleteConfirmed(int id)
            {
                Produto produto = db.Produtos.Find(id);
                db.Produtos.Remove(produto);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
    
        }
    }
    

    VIEW

    @model CF.Models.Produto
    @{
        ViewBag.Title = "Novo Produto";
    }
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    <h2>Cadastro de Produtos</h2>
    @Html.ValidationSummary("Existem dados incompletos")
    
    @using (Html.BeginForm())
    { 
        <fieldset>
            <legend>Seleção de Categorias</legend>
            @Html.Label("Categoria")
            @Html.DropDownList("Categoria", (SelectList)ViewBag.categoria, "Selecione uma Categoria", new { ID = "Categoria" })
    
            @Html.Label("SubCategoria")
            <select id="SubCategoria"></select>
        </fieldset>
        <fieldset>
            <legend>Produto</legend>
            @Html.LabelFor(item => item.NomeProduto)
            @Html.EditorFor(item => item.NomeProduto)
            @Html.ValidationMessageFor(item => item.NomeProduto)
            <br />
            @Html.LabelFor(item => item.Valor)
            @Html.EditorFor(item => item.Valor)
            @Html.ValidationMessageFor(item => item.Valor)
            <br />
            @Html.LabelFor(item => item.Estoque)
            @Html.EditorFor(item => item.Estoque)
            @Html.ValidationMessageFor(item => item.Estoque)
            <br />
    
             <p>
                <input type="submit" value="Create" />
            </p>
    
        </fieldset>
    }
    <script type="text/javascript">
    
        $(function () {
            $('#Categoria').change(function () {
                // Recupero o valor selecionado no dropdown de Categoria e  chamo a action para efetuar a consulta
                $.getJSON('ListaSubCategorias/' + $('#Categoria').val(), function (data) {
                    var items = '<option> Selecione uma SubCategoria</option>';
                    // Leio uma lista de subcategorias e populo as subcategorias de uma categoria
                    $.each(data, function (i, subcategoria) {
                        items += "<option value='" + subcategoria.Value + "'>" + subcategoria.Text + "</option>";
                    });
                    $('#SubCategoria').html(items);
                });
            });
        });
    </script>
    

    espero que alguém possa me ajudar


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

    sexta-feira, 14 de junho de 2013 15:47

Todas as Respostas

  • SubCategoria é o nome da Drop que vc deseja recuperar o valor?

    Pelo oq eu vi ela não faz parte do seu model, vc pode passar ela no método POST do seu Create. Exemplo

     [HttpPost]
            public ActionResult Create(Produto produto, FormCollection form, string SubCategoria)
            {
                try
                {
                    if (ModelState.IsValid)
                    {
    
                        db.Produtos.Add(produto);
                        db.SaveChanges();
                        return RedirectToAction("Index");
                    }
                    return View();
                }
                catch
                {
                    return View();
                }
            }


    Paulo Marcelo Dalbosco

    sexta-feira, 14 de junho de 2013 20:32
  • como eu resgataria esse valor e atribuiria ele ao IDSubCategoria que fik na class produto?

    produto.IDCategoriaPai = form["IDDODROPDOWN"] ;

    seria isso? e no caso a string SubCategoria o que seria?


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

    terça-feira, 18 de junho de 2013 15:15