Проблема с возвращением ложного значения ModelState.IsValid - PullRequest
0 голосов
/ 22 апреля 2019

В ASP.NET с использованием Entity Framework Я пытаюсь добавить новую запись в базу данных с именем Provider.Представление возвращает значение по умолчанию UserID и категорию в качестве внешнего ключа из другой таблицы.Когда я отлаживаю, у метода Post контроллера есть if (ModelState.IsValid), который продолжает возвращать false.Не могу понять, почему, вероятно, я не полностью понимаю ModelState и как он работает.

Когда я переопределяю if (ModelState.IsValid), чтобы при (true) он успешно добавлял новую запись в базу данных с помощьювсе поля установлены правильно.

Когда я проверяю местных жителей, они представляют следующее: (Я решил разместить картинку в качестве ссылки из-за нехватки репутации, чтобы использовать формат изображения) https://i.ibb.co/2Yrz4d8/debugging-ASP.png

ModelState.IsValid = false

providers             | {MAR.Models.Providers}
providers.ID          | 0
Providers.UserID      | "003f528f-f8..."
providers.VisitAvail  | null
providers.VisitType   | null
providers.VisitTypeID | 1

Модель:

public class Providers
    {
        public int ID { get; set; }
        public string UserID { get; set; }
        public int? VisitTypeID { get; set; }
        public virtual VisitTypes VisitType { get; set; }
        public virtual ICollection<VisitAvailabilitys> VisitAvailability { get; set; } 
    }

public class VisitTypes
    {
        public int ID { get; set; }
        public string Description { get; set; }
        public int? SiteID { get; set; }
        public virtual Sites Site { get; set; }
        public int? StatusID { get; set; }
        public virtual Status Status { get; set; }
        public virtual ICollection<Appointments> Appointment { get; set; }
        public virtual ICollection<VisitReasons> VisitReason { get; set; }
        public virtual ICollection<Providers> Provider { get; set; }
    }

Контроллер:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Assign([Bind(Include = "ID,UserId,VisitTypeID")] Providers providers)
        {

            if (ModelState.IsValid)
            {
                db.Providers.Add(providers);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ManageMessageId? message;
            message = ManageMessageId.NotAssign;
            return RedirectToAction("Index", new { Message = message });//providers
        }

Вид:

<div class="form-group">
            @Html.LabelFor(model => model.UserID, "User ID" ,htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserID, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", @Value = ViewBag.UserId } })
                @Html.ValidationMessageFor(model => model.UserID, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.VisitTypeID, "Type of provider", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(model => model.VisitTypeID, null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.VisitTypeID, "", new { @class = "text-danger" })
            </div>
        </div>

Мой ожидаемый результат для ModelState.IsValid будет true .

1 Ответ

0 голосов
/ 22 апреля 2019

Направьте курсор на объект ModelState, я уверен, он покажет вам точную ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...