从未给控制器的视图模型

时间:2014-03-28 08:27:09

标签: asp.net asp.net-mvc

我遇到的问题是此控制器中的模型为null(其中的所有内容)。因此,从视图页面可以错误地填充模型。因此,当应用程序到达控制器时,模型为空(一切都为空)。

查看:

@{
    ViewBag.Title = "Product Beheer";
    Layout = "~/Views/Shared/_Layout3.cshtml";
}
@model IntroSport.Models.ProductToevoegModel
<h2>ProductToevoegen</h2>

@using (Html.BeginForm("ProductMaken", "Admin"))
{
    //@Html.ValidationSummary(true)

    <fieldset>
        <div class="editor-label">Prijs</div>
        <div class="editor-field"> 
                                  @Html.EditorFor(model => model.Product.Prijs)</div> 
        <div class="editor-label">Size</div>
        <div class="editor-field"> 
                                  @Html.EditorFor(model => model.Product.Size)</div>
        <div class="editor-label">Merk</div>
        <div class="editor-field"> 
                                  @Html.EditorFor(model => model.Product.Merk)</div>
        <div class="editor-label">Naam</div>
        <div class="editor-field"> 
                                  @Html.EditorFor(model => model.Product.Naam)</div>
        <div class="editor-label">URL Foto</div>
        <div class="editor-field"> 
                                  @Html.EditorFor(model => model.Product.AfbeeldingURL)</div>

        <input type="submit" value="Voeg toe" />
    </fieldset>
}

控制器:

public ActionResult ProductMaken()
{
    try
    {
        ProductToevoegModel viewModel = new ProductToevoegModel();
        return View(viewModel);
    }
    catch (Exception e)
    {
        ViewBag.FoutMelding = "Er is iets fout gegaan: " + e;
        return View();
    }
}
[HttpPost]
public ActionResult ProductMaken(ProductToevoegModel model)
{
    if (ModelState.IsValid)
    {
        try
        {
            productDBcontroller.maakProduct(model);
            return Redirect("/admin/ProductBeheer");
        }
        catch (Exception e)
        {
            ViewBag.FoutMelding = "Er is iets fout gegaan: " + e;
            return View();
        }
    }
    else
    {
        return View("ProductMaken", model);
    }

型号:

namespace IntroSport.Models
{
    public class ProductToevoegModel
    {
        public Product Product { get; set; }
    }
}

产品型号:

namespace IntroSport.Models
{
    public class Product
    {
        public int ProductID;

        [Required(ErrorMessage = "Dit is een verplicht veld!")]
        public String Naam;

        [Required(ErrorMessage = "Dit is een verplicht veld!")]
        public String Size;

        [Required(ErrorMessage = "Dit is een verplicht veld!")]
        public String AfbeeldingURL;

        [Required(ErrorMessage = "Dit is een verplicht veld!")]
        public String Merk;

        [Required(ErrorMessage = "Dit is een verplicht veld!")]
        public int Categorie;

        [Required(ErrorMessage = "Dit is een verplicht veld!")]
        public int Voorraad;

        [Required(ErrorMessage = "Dit is een verplicht veld!")]
        public Double Prijs;
    }
}

1 个答案:

答案 0 :(得分:1)

您必须将Product类中的所有字段更改为自动属性:

public class Product
{
    public int ProductID;

    [Required(ErrorMessage = "Dit is een verplicht veld!")]
    public String Naam { get; set; }

    [Required(ErrorMessage = "Dit is een verplicht veld!")]
    public String Size { get; set; }

    [Required(ErrorMessage = "Dit is een verplicht veld!")]
    public String AfbeeldingURL { get; set; }

    [Required(ErrorMessage = "Dit is een verplicht veld!")]
    public String Merk { get; set; }

    [Required(ErrorMessage = "Dit is een verplicht veld!")]
    public int Categorie { get; set; }

    [Required(ErrorMessage = "Dit is een verplicht veld!")]
    public int Voorraad { get; set; }

    [Required(ErrorMessage = "Dit is een verplicht veld!")]
    public Double Prijs { get; set; }
}