Jakub Provaznik Ответов: 0

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

Теперь это работает. Состояние модели возвращает ожидаемые сообщения об ошибках. Спасибо!

0 Ответов