Telerik for ASP.NET MVC Исчезает ComboBoxListFor, когда значение равно NULL при отправке и обратной передаче - PullRequest
0 голосов
/ 02 октября 2018

У меня есть Telerik MVC ComboBoxFor на странице.

@(Html.Kendo().ComboBoxFor(m => m.RequestModel.RequestedCreditLimit)
    .BindTo(Model.CreditLimits)
    .DataValueField("Id")
    .DataTextField("DisplayText")
)

Значение по умолчанию RequestModel.RequestedCreditLimit (наследует интерфейс IValidateableObject), когда страница загружается, равно 1000. Когда пользователь отправляет числа в полевсе работает нормально.

[DisplayName("Requested Credit Limit")]
public int? RequestedCreditLimit { get; set; }

public string Justification { get; set; }

Когда пользователь публикует неверное значение, логика Validate либо по праву ловит это и возвращает их обратно на страницу.

/* Part of the Validate() method for my RequestModel */
if (!RequestedCreditLimit.HasValue || RequestedCreditLimit.Value < 1)
{
     yield return new ValidationResult("Requested Credit Limit is required for Purchasing Card applications.", new[] { "RequestedCreditLimit" });
}
else if (RequestedCreditLimit > 5000 && string.IsNullOrEmpty(Justification))
{
     yield return new ValidationResult("Must have justification for limits greater than $5,000.", new[] { "RequestedCreditLimit" });
}

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(RequestFormViewModel viewModel) /*Controller Method*/
    {
        if (ModelState.IsValid)
        {
            /*Insert into DB Logic*/
            return RedirectToAction("Details", new { id = viewModel.RequestModel.Id });
        }
        else
        {
            return View(viewModel);
        }
    }

Однако, когдаПользователь оставляет поле ComboBoxFor пустым и публикует страницу, логика проверки по-прежнему верна и возвращает их на страницу, НО ComboBoxFor никогда не будет отправлять значения при последующих обратных передачах.При нажатии на кнопку отправки, ComboBox для исчезает с экрана.Отладка метода контроллера показывает, что значение RequestModel.RequestedCreditLimit имеет значение null, даже если пользователь может ввести значение (действительное или недействительное).Когда пользователь возвращается к экрану после того, как логика контроллера видит, что в RequestModel.RequestedCreditLimit нет значения, ComboBoxFor возвращается туда, где и должен быть.

Для ясности, значения ComboBoxFor связаны ссвойство в ViewModel, и логика для этого выглядит следующим образом.

    public static List<DropDownListItemWithIntId> GetCreditLimits()
    {
        return
            new List<DropDownListItemWithIntId>()
            {
                new DropDownListItemWithIntId() { Id = 2500, DisplayText = "2500" },
                new DropDownListItemWithIntId() { Id = 5000, DisplayText = "5000" },
                new DropDownListItemWithIntId() { Id = 10000, DisplayText = "10000" }
            };
    }

Я знаю, что когда экран возвращается, выбираемые значения в ComboBoxFor являются правильными.Настоящая проблема - исчезновение ComboBoxFor.Я также был свидетелем такого поведения на DropDownListFor.

Как обеспечить правильную работу ComboBoxListFor и DropDownListFor, даже если опубликовано нулевое значение?

...