У меня есть asp.net MVC 4 с двумя переключателями. При загрузке страницы секция просмотра скрыта с помощью css. на самом экране, когда пользователь выбирает одну радиокнопку, когда секция скрыта, а другая отображается, а при нажатии другой радиокнопки отображается другая секция. Я хочу выполнить условную проверку, поэтому проверяется флажок. Я создал атрибут RequriredIf, но он работает только на стороне сервера. код:
public class RequiredIfAttribute : ValidationAttribute
{
private String PropertyName { get; set; }
private String ErrorMessage { get; set; }
private Object DesiredValue { get; set; }
public RequiredIfAttribute(String propertyName, Object desiredvalue, String errormessage)
{
this.PropertyName = propertyName;
this.DesiredValue = desiredvalue;
this.ErrorMessage = errormessage;
}
protected override ValidationResult IsValid(object value, ValidationContext context)
{
Object instance = context.ObjectInstance;
Type type = instance.GetType();
Object proprtyvalue = type.GetProperty(PropertyName).GetValue(instance, null);
if (proprtyvalue.ToString() == DesiredValue.ToString() && value == null)
{
return new ValidationResult(ErrorMessage);
}
return ValidationResult.Success;
}
}
и вот как я использую этот атрибут:
[RequiredIf("LocationType", LocationTypeEnum.BuildingOffice, "Please enter building number")]
public string BuildingNumberName
{
get { return _BuildingNumberName; }
set { _BuildingNumberName = value; }
}
[RequiredIf("LocationType", LocationTypeEnum.BuildingOffice, "Please enter floor number")]
private string _Floor = string.Empty;
public string Floor
{
get { return _Floor; }
set { _Floor = value; }
}
private string _ApartmentOfficeNumber = string.Empty;
[RequiredIf("LocationType", LocationTypeEnum.BuildingOffice, "Please enter appartment/office number")]
public string ApartmentOfficeNumber
{
get { return _ApartmentOfficeNumber; }
set { _ApartmentOfficeNumber = value; }
}
а также
private string _HouseNumber = string.Empty;
[RequiredIf("LocationType", LocationTypeEnum.VillaHouse, "Please enter house number")]
public string HouseNumber
{
get { return _HouseNumber; }
set { _HouseNumber = value; }
}
Это имеет небольшой недостаток:
1) он возвращает сообщение, поэтому пользователю приходится ждать возврата и исправления ошибок. 2) после обратной передачи раздел по умолчанию скрыт (с использованием css).
Я хочу сделать это с помощью клиентской стороны. Что мне нужно сделать?
Я считаю, что вам нужно добавить в свой файл web.config, чтобы включить проверку на стороне клиента.
<configuration>
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
</configuration>