使用视图模型

时间:2017-12-03 14:40:32

标签: c# asp.net-mvc

我是c#和asp.net MVC的新手,我正在开展一个小项目。我使用视图模型在创建视图上出错。发生的事情是,在我提交表单后,我填写的数据不会被控制器接收。下面是我的视图的代码,我在控制器上的创建和使用

的ModelView的视图
 //Controllers        
// GET: Producto/Create
public ActionResult Create()
{
    return View(ProductoViewModel.CargarListas());
}


// POST: Producto/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ProductoViewModel producto)
{
    Producto aux = producto.Producto;
    aux.IdRecetaPreferida = producto.IdRecetaPreferida;
    if (aux.Guardar())
    {
        return RedirectToAction(nameof(Index));
    }
    return View();
}

/*
* My view model im using on the view
*/
public class ProductoViewModel
{
    public Producto Producto {get;set;}
    [Display(Name = "Receta")]
    public long IdRecetaPreferida { get; set; }
    public Receta Receta { get; set; }
    public List<Receta> Recetas { get; set; }

    public ProductoViewModel()
    {
        this.Recetas = new List<Receta>();
        this.Receta = new Receta();
    }

    public static ProductoViewModel CargarListas()
    {
        ProductoViewModel productoViewModel = new ProductoViewModel()
        {
            Recetas = Receta.TraerTodos()
        };
        return productoViewModel;
    }

}

//My create view
@model WebApp.ViewModels.ProductoViewModel

<h2>Ingresar Producto</h2>

<hr />
<div class="row">
    <div class="col-md-12">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group row">
                <label asp-for="Producto.Nombre" class="col-sm-2 col-form-label"></label>
                <div class="col-sm-10">
                    <input asp-for="Producto.Nombre" class="form-control" placeholder="Nombre Producto" />
                    <span asp-validation-for="Producto.Nombre" class="text-danger"></span>
                </div>
            </div>
            <div class="form-group row">
                <label asp-for="Producto.Descripcion" class="col-sm-2 col-form-label"></label>
                <div class="col-sm-10">
                    <input asp-for="Producto.Descripcion" class="form-control" placeholder="Una rica descripcion del producto" />
                    <span asp-validation-for="Producto.Descripcion" class="text-danger"></span>
                </div>
            </div>
            <div class="form-group row">
                <label asp-for="IdRecetaPreferida" class="col-sm-2 col-form-label"></label>
                <div class="col-sm-10">
                    @Html.DropDownListFor(m => m.IdRecetaPreferida, new SelectList(Model.Recetas, "Id", "Nombre"), new { @class = "custom-select" })
                </div>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
                <a asp-action="Index">Volver</a>
            </div>
        </form>
    </div>
</div>

如果可以指出我的错误会很感激。下面是正在调试的变量的屏幕截图

Debug view of the create in the controller

1 个答案:

答案 0 :(得分:0)

我相信你忘了指定表单应该发送POST请求而不是GET(默认)。

<form asp-action="Create" method="post">

或者您可以从Create方法中删除HttpPost属性。