Recover data from View Asp.net

Asked

Viewed 198 times

0

I have following problem, when I place an order in the quantity field when I place a certain number I have to arrive if I have in stock in the bank, and if I have to reduce the quantity in the bank.However I do not know how to pass the value of the view to my controller verify this.

@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);

    }

Stockpile

    [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; }
}

Request:

    [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; }

}

inserir a descrição da imagem aqui

  • I don’t understand, you want to discount the stock when creating the order or you want to check the availability as validation of the order creation and inform the user the limit available if the desired quantity is greater than the stock?

  • @ Leandro Angelo I need to do the 2, for example if I type 5 as I try to create, it already check if you have in stock and cash, if you do not have in stock I inform the msg, I am only lost in this.

1 answer

1

You can make the query in stock and add an error in Modelstate if the requested quantity is larger than the 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);
    }
  • 1

    Thanks, just a doubt , to check the stock I’m trying to do this: var qtdEstoque = db.Estoque.Select(p => p.Quantity). Where(p => p.productId == model.Pedido.Produtoid)); but in Where I cannot access the productID

  • Post the rest of your view should come by the dropdown you populate

  • @ Leandro Angelo Adiconei there, the unit price field ignore pq it will receive the value referring to the id of the selected product

  • @Cesaraugusto, by his View, the product ID is not within the order , maybe direct in Pedidovm, which you forgot to include in the question, but as you ride by Viewbag, maybe it is not even mapped.

  • is I removed the product and customer values are coming, I’m just having trouble getting the quantity and unitary value of the selected product var qtdEstoque = db.Estoque.Where(p => p.Produtoid == model.Produtoid). Select(p => p.Quantity); var precoUnitario = db.Produto.Where(p => p.Id == model.Produtoid). Select(p => p.Preco); model.Precounit = Convert.Todecimal( precoUnite); model.Quantity = Convert.Toint32(qtdThis);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.