У меня есть 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, даже если опубликовано нулевое значение?