Asp Mvc 5 Liste déroulante
Bonjour,
Voila je voudrais mettre en place une liste déroulante contenant les catégories...
Voici mon model :
Code:
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:
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:
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