Recover data from asp.net View

0

I have the following problem, when I place an order in the quantity field when I put a certain number I have to get it if it is in stock in the bank, and if I have to decrease the quantity in the bank, I do not know how to pass the value of the view to my controler check this out.

@using (Html.BeginForm()) { @Html.AntiForgeryToken()

<div class="form-horizontal">
  <h4>Pedido</h4>
  <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" })
  <div class="form-group">
    <label class="control-label col-md-2" for="Pedido_ProdutoId">Cliente</label>
    <div class="col-md-10">
      @Html.DropDownList("ClienteId", null, htmlAttributes: new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Pedido.ClienteId, "", new { @class = "text-danger" })
    </div>
  </div>

  <div class="form-group">
    <label class="control-label col-md-2" for="Pedido_ProdutoId">Produto</label>
    <div class="col-md-10">
      @Html.DropDownList("ProdutoId", null, htmlAttributes: new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Pedido.ProdutoId, "", new { @class = "text-danger" })
    </div>
  </div>

  <div class="form-group">
    @Html.LabelFor(model => model.Pedido.Quantidade, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
      @Html.EditorFor(model => model.Pedido.Quantidade, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Pedido.Quantidade, "", new { @class = "text-danger" })
    </div>
  </div>

  @*
  <div class="form-group">
    @Html.LabelFor(model => model.Pedido.PrecoUnidade, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
      @Html.EditorFor(model => model.Pedido.PrecoUnidade, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Pedido.PrecoUnidade, "", new { @class = "text-danger" })
    </div>
  </div>*@

  <div class="form-group">
    <div class="col-md-offset-2 col-md-10">
      <input type="submit" value="Create" class="btn btn-default" />
    </div>
  </div>
</div>
}
        // GET: Pedidos/Create
    public ActionResult Create()
    {

        Db db = new Db();

        ViewBag.ClienteId = new SelectList(db.Cliente, "Id", "Nome");
        ViewBag.ProdutoId = new SelectList(db.Produto, "Id", "Nome");
        return View();
    }

    // POST: Pedidos/Create
    [HttpPost]
    public ActionResult Create(PedidoVM model)
    {
        ViewBag.ClienteId = new SelectList(db.Cliente, "Id", "Nome");
        ViewBag.ProdutoId = new SelectList(db.Produto, "Id", "Nome");

        db.Pedido.Add(model.Pedido);
        db.SaveChanges();


        return View(model);

    }

Stocking

    [Table("Estoque")]
public class Estoque
{
    [Key]
    public int Id { get; set; }

    public int DepositoId { get; set; }

    public int ProdutoId { get; set; }

    public int Quantidade { get; set; }

    [ForeignKey("DepositoId")]
    public virtual Deposito Deposito { get; set; }

    [ForeignKey("ProdutoId")]
    public virtual Produto Produto { get; set; }
}

Order:

    [Table("Pedido")]
public class Pedido
{
    public int Id { get; set; }

    public int ClienteId { get; set; }

    public int ProdutoId { get; set; }

    public string Quantidade { get; set; }

    public decimal PrecoUnidade { get; set; }

    [ForeignKey("ProdutoId")]
    public virtual Produto Produto { get; set; }

    [ForeignKey("ClienteId")]
    public virtual Cliente Cliente { get; set; }

}

    
asked by anonymous 16.02.2018 / 20:26

1 answer

1

You can query the inventory and add an error in ModelState if the requested quantity is larger than the one available.

    [HttpPost]
    public ActionResult Create(PedidoVM model)
    {
        //Consulta a quantidade do produto no estoque
        var quantidadeEstoque = 5; 

        if(model.Pedido.Quantidade > quantidadeEstoque)
        {
            ModelState.AddModelError("Pedido.Quantidade", string.Format("Existem apenas {0} items disponíveis no estoque.",  quantidadeEstoque));
        }


        if(ModelState.IsValid)
        {
            //Persiste o pedido no banco
            //Desconta a quantidade no estoque

           return RedirectToAction("Sucesso);
        }

         return View(model);
    }
    
16.02.2018 / 21:00