/ / ModelState перевірка не показує, які поля є недійсними [дублювати] - asp.net-core-mvc, modelstate

Валідація ModelState не показує, які поля недійсні [дублікат] - asp.net-core-mvc, modelstate

Моя перевірка ModelState дає мені дуже загальні повідомлення про помилки, я хотів би знати точно, які поля є недійсними.

Приклад

Як ви можете бачити перші два текстові поля "Запуск"швидкість <1 хв "і" Частота запуску 1-3 хв "обидва порожні, але повідомлення про валідацію моделей лише кажуть" Значення "" недійсне ".

На мій погляд, я розмістив наступний рядок: <div asp-validation-summary="All"></div>

Це мої дії контролера та моя модель з необхідними атрибутами:

[HttpPost]
public async Task<IActionResult> EditSubtitleSetting(EditSubtitleSettingsModel model)
{
try
{
if (ModelState.IsValid)
{
await _subtitleSettingService.UpdateSubtitleSetting(model);
return RedirectToAction("Subtitling");
}
} catch (CustomException e)
{
foreach (var m in e.Messages)
{
ModelState.AddModelError(m.Key, m.Message);
}
}
return View(model);
}


public class EditSubtitleSettingsModel
{
public string Id { get; set; }
public string FromLanguage { get; set; }
public string ToLanguage { get; set; }

[Required(ErrorMessage = "Startup rate less than one minute is required")]
public decimal StartupRateLessThanOneMinute { get; set; }

[Display(Name = "Startup rate between one and three minutes")]
[Required(ErrorMessage = "Startup rate between one and three minutes is required")]
public decimal StartupRateBetweenOneAndThreeMinutes { get; set; }

[Required(ErrorMessage = "Startup rate between three and five minutes is required")]
public decimal StartupRateBetweenThreeAndFiveMinutes { get; set; }

[Required(ErrorMessage = "Price per subtitle is required")]
public decimal PricePerSubtitle { get; set; }

[Required(ErrorMessage = "Default rate for translators is required")]
public decimal DefaultRateTranslators { get; set; }
}

Як мені повідомити, що повідомлення про перевірку повідомляє, які поля є недійсними?

Відповіді:

0 для відповіді № 1

Очевидно, required атрибут працює лише на nullable decimals. Таким чином, я змінив свою модель, щоб мати тільки нульові десяткові знаки, і тепер він правильно показує повідомлення перевірки. Так дуже легко виправити.

Ось як виглядає моя модель:

public class EditSubtitleSettingsModel
{
public string Id { get; set; }
public string FromLanguage { get; set; }
public string ToLanguage { get; set; }

[Required(ErrorMessage = "Startup rate less than one minute is required")]
public decimal? StartupRateLessThanOneMinute { get; set; }

[Required(ErrorMessage = "Startup rate between one and three minutes is required")]
public decimal? StartupRateBetweenOneAndThreeMinutes { get; set; }

[Required(ErrorMessage = "Startup rate between three and five minutes is required")]
public decimal? StartupRateBetweenThreeAndFiveMinutes { get; set; }

[Required(ErrorMessage = "Price per subtitle is required")]
public decimal? PricePerSubtitle { get; set; }

[Required(ErrorMessage = "Default rate for translators is required")]
public decimal? DefaultRateTranslators { get; set; }
}