Укажите свойство StateCode
с атрибутом [Required]
:
[Required(ErrorMessage = "Please select a state")]
public string StateCode { get; set; }
public IEnumerable<SelectListItem> StateList
{
get
{
return State
.GetAllStates()
.Select(state => new SelectListItem
{
Text = state.Value,
Value = state.Value
})
.ToList();
}
}
, а затем вы можете добавить соответствующее сообщение об ошибке проверки:
@Html.DropDownListFor(model => model.StateCode, Model.StateList, "select")
@Html.ValidationMessageFor(model => model.StateCode)
ОБНОВЛЕНИЕ:
Хорошо, похоже, вы хотите условно проверить это свойство StateCode
в зависимости от какого-либо другого свойства в вашей модели представления.Теперь это совсем другая история, и вы должны были объяснить это в своем первоначальном вопросе.В любом случае, одна возможность состоит в том, чтобы написать собственный атрибут проверки:
public class RequiredIfPropertyNotEmptyAttribute : ValidationAttribute
{
public string OtherProperty { get; private set; }
public RequiredIfPropertyNotEmptyAttribute(string otherProperty)
{
if (otherProperty == null)
{
throw new ArgumentNullException("otherProperty");
}
OtherProperty = otherProperty;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var property = validationContext.ObjectType.GetProperty(OtherProperty);
if (property == null)
{
return new ValidationResult(string.Format(CultureInfo.CurrentCulture, "{0} is an unknown property", new object[]
{
OtherProperty
}));
}
var otherPropertyValue = property.GetValue(validationContext.ObjectInstance, null) as string;
if (string.IsNullOrEmpty(otherPropertyValue))
{
return null;
}
if (string.IsNullOrEmpty(value as string))
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
return null;
}
}
и теперь украсить ваше свойство StateCode
этим атрибутом, например так:
public string AddressLine1 { get; set; }
[RequiredIfPropertyNotEmpty("AddressLine1", ErrorMessage = "Please select a state")]
public string StateCode { get; set; }
Теперь при условии, что у вас естьследующая форма:
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(x => x.AddressLine1)
@Html.EditorFor(x => x.AddressLine1)
</div>
<div>
@Html.LabelFor(x => x.StateCode)
@Html.DropDownListFor(x => x.StateCode, Model.States, "-- state --")
@Html.ValidationMessageFor(x => x.StateCode)
</div>
<input type="submit" value="OK" />
}
раскрывающийся список StateCode
потребуется только в том случае, если пользователь ввел значение в поле AddressLine1
.