ASP .NET MVC 3 - RemoteAttribute переопределить IsValid, доступ к дополнительным полям - PullRequest
1 голос
/ 30 августа 2011

Ребята, я создаю новый атрибут, который наследуется от System.Web.Mvc.RemoteAttribute. Я хотел бы переопределить метод IsValid для этого проверки также работает без включенного JavaScript. Но я не знаю, как я могу получить доступ к дополнительным полям. Мой код:

[AttributeUsage(AttributeTargets.Property)]
public class DocumentationAttribute : System.Web.Mvc.RemoteAttribute
{
    public DocumentationAttribute()
        : base("ValidPass", "Validation")
    {
        base.HttpMethod = "Post";
    }
    private DocumentationAttribute(string routeName)
        : base(routeName)
    {

    }
    private DocumentationAttribute(string action, string controller)
        : base(action, controller)
    {

    }
    private DocumentationAttribute(string action, string controller, string areaName)
        : base(action, controller, areaName)
    {

    }

    public override bool IsValid(object value)
    {
        //How can i access to the additional fields?
    }}

Модель класса:

        [Display(Name = "Passport")]
        [Documentation(ErrorMessage = "{0} not valid", AdditionalFields = "IDPass")]
        public virtual String Passport
        {
            set;
            get;
        }

1 Ответ

0 голосов
/ 30 августа 2011

Вы не можете сделать удаленную проверку без JavaScript.Вот как это работает.С тем же успехом можно полагаться только на проверку на стороне сервера, поскольку это единственный вид проверки, который работает без javascript.

Вы пытаетесь создать средство проверки, которое работает удаленно с javascript, но работает на стороне сервера, если javascriptотключен?Если это так, то вы должны создать пользовательский атрибут, производный от ValidationAttribute, и также использовать remote.

Специально для вашего вопроса вам нужно создать открытое свойство в вашем атрибуте с именем AdditionalFields, это устанавливается в инициализаторекогда вы объявляете свойство, вы можете получить доступ к свойству из вашего IsValid.

РЕДАКТИРОВАТЬ:

На основе вашей дополнительной информации вам необходимо использовать вторую форму IsValid, которая принимает контекст проверки,Вы бы сделали что-то вроде этого:

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
    var fields = validationContext.ObjectType.GetProperty(this.AdditionalFields);
    var fieldsValue = (string)fields.GetValue(validationContext.ObjectInstance, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...