Asp.net исключение MVC при отправке недопустимого состояния модели
Привет, я работаю над своим собственным приложением. Я установил базовый crud, и когда я хочу создать новый элемент в базе данных через свою форму создания, все идет хорошо. Проблема заключается в том, что я намеренно пропускаю что-то и ожидаю сообщений об ошибках. Тогда у меня есть повод для волнения:
Цитата:Пункт ViewData, которая Кодтипа ключ ' - это типа 'System.Типа int32' но должны быть типа 'интерфейс IEnumerable&ЛТ;selectlistitem&ГТ;'.
моя модель:
public int JidloID { get; set; } [Required(ErrorMessage ="název je vyžadován")] public string name { get; set; } public int CategoryID { get; set; } //public string druh { get; set; } [Required(ErrorMessage ="recept vyžadován")] [AllowHtml] public string recipe { get; set; } [Required(ErrorMessage ="suroviny požadovány")] [AllowHtml] public string ingredients { get; set; } public Category Category { get; set; }
Действие контроллера:
public ActionResult Create() { var categoryList = new List<SelectListItem>(); categoryList.AddRange(db.Categories .Select(a => new SelectListItem { Value = a.CategoryID.ToString(), Text = a.popis })); ViewBag.CategoryList = categoryList; return View(); }
public ActionResult Add(Jidlo jidlo,int CategoryID) { if(ModelState.IsValid) { db.Jidlos.Add(jidlo); db.SaveChanges(); return RedirectToAction("Display"); } return View("Create", jidlo); }
Моя форма в поле зрения:
@using jidloApp.Models @using jidloApp.Classes @model Jidlo @{ ViewBag.Title = "Create"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Create</h2> @Html.ValidationSummary() @using (Html.BeginForm("Add", "Disp", FormMethod.Post, new { @class = "form-horizontal" })) { <div class="form-group"> <label class="col-sm-2 control-label">Nazev</label> <div class="col-sm-10"> @Html.TextBoxFor(x => x.name, new { @class = "form-control" }) @Html.ValidationMessageFor(x => x.name) </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Recept</label> <div class="col-sm-10"> @Html.TextAreaFor(x => x.recipe, new { @class = "form-control formatedtext" }) @Html.ValidationMessageFor(x => x.recipe) </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Ingredience</label> <div class="col-sm-10"> @Html.TextAreaFor(x => x.ingredients, new { @class = "form-control textarea" }) @Html.ValidationMessageFor(x => x.ingredients) </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Kategorie</label> <div class="col-sm-10"> @Html.DropDownList("CategoryID", ViewBag.CategoryList as IEnumerable<SelectListItem>, new { @class = "form-control" }) </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">Pridat novy recept</button> </div> </div> } <script src="https://cloud.tinymce.com/stable/tinymce.min.js"></script> <script> tinymce.init({ selector: 'textarea', toolbar: 'fontsizeselect', fontsize_formats: '8pt 10pt 12pt 14pt 18pt 24pt 36pt' }); </script>
У вас есть какие-нибудь идеи, что с этим делать?
Что я уже пробовал:
До сих пор я пробовал изменить список выбора.
F-ES Sitecore
Вид нуждается в ViewBag.Категорийный список должен быть заполнен. Вы заполняете его в действии Create, и если проверка проходит успешно, вам не нужно его добавлять, так как он перенаправляется, но если проверка завершается неудачно, вы возвращаете Create view снова, но без ViewBag.Категорист заселен. Поэтому начните с заполнения этих данных в Add так, как вы создаете, и посмотрите, поможет ли это.
Jakub Provaznik
Теперь это работает. Состояние модели возвращает ожидаемые сообщения об ошибках. Спасибо!