Форма отправки DropDownListFor с обязательным полем - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть выпадающий список из таблицы под названием StampsCSEMonths_test.Я пытаюсь сделать раскрывающийся список, необходимый перед отправкой формы.Проблема в том, что он всегда отправляет форму независимо от того, выбираю я или нет.

В чем может быть проблема?Вид:

@model WINHRAdmin.Models.CTS_Stamps

    @using (Html.BeginForm())
    {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

     @Html.DropDownListFor(model => model.stampscsemonths_id, ViewBag.StampsCSEMonths_test as IEnumerable<SelectListItem>, "", new { @class = "form-control  " })
      @Html.ValidationMessageFor(model => model.stampscsemonths_id, "", new { @class = "text-danger" })

    }

Модель:

namespace WINHRAdmin.Models
{
    public class CommitmentToServiceModel
    {

    }

    public class CTS_Stamps
    {
        [Required]
        [Range(1,Int32.MaxValue,ErrorMessage ="MonthYerar is required")]
        public int? stampscsemonths_id { get; set; }
    }


}

Контроллер:

public ActionResult CTS_Stamps()
{

  ViewData["StampsCSEMonths_test"] =

   new SelectList((from s in _IntranetEntities.StampsCSEMonths_test.OrderByDescending(x => x.stampscsemonths_id).ToList()
                   select new
                   {
                       stampscsemonths_id = s.stampscsemonths_id,
                       FullName = s.month + "/" + s.year
                   }),
       "stampscsemonths_id",
       "FullName",
       null);


    LoadEmployeer();
    return View();
}


[HttpPost]

public ActionResult CTS_Stamps(FormCollection collection)
{

    var testvar = collection["stampscsemonths_id"];//after submission it does get the value of ID

    return View();
}

1 Ответ

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

Как правило, вы хотите использовать библиотеку на стороне клиента, например, jquery.validate, чтобы предотвратить отправку формы, если она недействительна.Вот хорошая статья на эту тему: https://www.codeproject.com/Articles/718004/ASP-NET-MVC-Client-Side-Validation.

Обычный шаблон проверки MVC на стороне сервера - это почти то, что вы делаете.Вы помещаете атрибут [Обязательный] над атрибутом модели данных.Это хорошо.У вас есть элемент @ValidationMessageFor в вашем представлении.Также хорошо.

Вы забыли, однако, проверить, действительна ли модель в вашем контроллере.Добавьте проверку для ModelState.IsValid перед обработкой результатов.Как то так:

            if (!ModelState.IsValid)
            {
                return View(collection); // assumes collection is the model
            }

Если пользователь отправляет недопустимую форму, после кругового обхода он увидит сообщение об ошибке проверки рядом с отсутствующим полем.

Надеюсь, что это поможет.

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