По какой-то причине ModelState.IsValid
чека в моем контроллере возвращается правда, даже если мое лицо и ViewModel свойства имеют [обязательно] атрибут на поле, которое равно 0.ModelState.IsValid игнорирования [Требуется] атрибут
Это сущность:
public class Ticket
{
public int Id { get; set; }
[Required]
public int FareId { get; set; }
public virtual Fare Fare { get; set; }
}
И ViewModel, который использует мое мнение:
public class BaseTicketViewModel
{
[Required, Display(Name = "Fare")]
public int FareId { get; set; }
public Fare Fare { get; set; }
}
на мой взгляд, я использовал ряд переключателей вместо падения DOW п список, то, что может быть причиной проблемы, я просто не знаю, как:
<div class="form-group">
@Html.LabelFor(model => model.FareId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@foreach (FareGroup fareGroup in Model.FareList)
{
<h5><strong>@fareGroup.Name</strong></h5>
foreach (Fare fare in fareGroup.Fares)
{
<label class="checkbox-inline">
@Html.RadioButtonFor(model => model.FareId, fare.Id)
@fare.Name
</label>
}
}
@Html.ValidationMessageFor(model => model.FareId, "", new { @class = "text-danger" })
</div>
</div>
Когда я отправить форму без выбора тарифа, мой контроллер поднимает DbUpdateException
, который говорит мне, что заявление INSERT противоречие с ограничением FOREIGN KEY, в основном, что Fare
с ID-не существует:
"{заявления INSERT конфликтного с ограничением FOREIGN KEY "FK_dbo.Tickets_dbo.Fares_FareId". Конфликт произошел в базе данных «отредактированный», таблица «dbo.Fares», столбец «Id». \ Г утверждение \ NThe было прервано. "}
По моему разумению, если FareId
собственности на ViewModel/объект билета 0, то ModelState.IsValid
должно быть ложным из-за [Required]
аннотацию на это имущество?
Вставьте код вашего контроллера. – gabsferreira
'0' является допустимым int. Поскольку 'int' не может быть null, вы всегда будете проходить тест' Required'. Вы хотите использовать 'int? 'Или nullable int. – Jonesopolis
Ну, 0 все еще значение. Когда он говорит, что Required означает, что он не может быть Null. – mattfetz