Bonjour,

Voila je voudrais mettre en place une liste déroulante contenant les catégories...

Voici mon model :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
 
namespace _03082017_XXX.Models
{
    public class Article
    {
        public virtual int ArticleId { get; set; }
 
        [Required(ErrorMessage = "La catégorie est obligatoire")]
        public virtual Category Categorie { get; set; }
 
        public virtual ApplicationUser AddBy { get; set; }
 
    }
}
Mon controlleurs :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
 
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using _03082017_XXX.Models;
 
namespace _03082017_XXX.Controllers
{
    public class ArticlesController : Controller
    {
        private ApplicationDbContext db = new ApplicationDbContext();
 
        // GET: Articles
        public ActionResult Index()
        {
            return View(db.Articles.ToList());
        }
 
        // GET: Articles/Create
        public ActionResult Create()
        {
            var list = db.Categories.ToList()
                        .Select(r => new SelectListItem { Value = r.CategoryId.ToString(), Text = r.CategoryName });
 
            ViewBag.categorie = list;
 
            return View();
        }
 
        // POST: Articles/Create
        // Afin de déjouer les attaques par sur-validation, activez les propriétés spécifiques que vous voulez lier. Pour 
        // plus de détails, voir  https://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "ArticleId")] Article article)
        {
            if (ModelState.IsValid)
            {
                db.Articles.Add(article);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(article);
        }
    }
}
Et ma vue :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
@model _03082017_xxx.Models.Article
 
@{
    ViewBag.Title = "Create";
}
 
<h2>Create</h2>
 
 
@using (Html.BeginForm("Create", "Articles", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
 
    <div class="form-horizontal">
        <h4>Article</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Categorie, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(m => m.Categorie, (IEnumerable<SelectListItem>)ViewBag.categorie, new { htmlAttributes = new { @class = "form-control" } })
            </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>
}
 
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
 
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Voila pour les partis code, je l'ai réduit en enlevant les autres champs, qui pour l'instant ne pose pas de problème...
Donc quand je clique sur le submit, j'ai mon erreur ErrorMessage = "La catégorie est obligatoire" qui revient... Pourtant ma liste déroulante est rempli avec ce quel contient dans ma table...

Quelqu'un pourrait m'orienter?

Merci