ASP.NET MVC 3: клиентская или удаленная проверка на уровне модели

Мне нужно выполнить некоторую проверку на уровне модели на странице редактирования MVC 3. (Чтобы быть точным, мне нужно подтвердить, что заполнено либо поле A, либо поле B, но не оба и не ни то, ни другое.)

Я хочу выполнить проверку на стороне клиента, а также проверку на стороне сервера, что означает либо использование удаленной проверки, либо реализацию дублирующего кода проверки. Я в порядке с любым.

Я прочитал несколько сообщений о развертывании вашей собственной проверки на уровне модели на стороне сервера, но ни одна из них не касалась также реализации проверки на стороне клиента. (Я не знаю - я уверен, что кто-то там может сказать мне - легко ли настроить проверку на стороне клиента на уровне модели с проверкой jQuery.)

Я также читал о реализации вашей собственной удаленной проверки с нуля, что мне, возможно, придется сделать, поскольку атрибут Remote находится только на уровне свойства.

Я прочитал этот вопрос, который идентичен моему, но единственная ссылка, которая действительно актуальна, похоже, не говорит того, что говорит ответчик.

Итак, мой вопрос: существует ли простой и относительно легкий способ реализовать проверку на уровне модели сервер + клиент с удаленным компонентом или без него? И есть ли где-нибудь хороший пост в блоге или веб-страница, объясняющий это?


person Ann L.    schedule 10.11.2011    source источник


Ответы (3)


На аналогичный вопрос ответили здесь, что может быть полезно? Данный ответ предназначен для проверки того, что введено хотя бы одно поле, но принципы, приведенные в ответе, могут быть тем, что вы ищете, и вы должны иметь возможность изменить ответ в соответствии с требуемой проверкой. Решение также предлагает варианты проверки как на стороне сервера, так и на стороне клиента, и я полагаю, что вы можете использовать это решение как для проверки уровня модуля или свойства?

Кроме того, имеется следующая статья: здесь подробно описано, как создать собственную пользовательскую проверку, подобную той, что указана в ответе, на который я ссылался.

Надеюсь это поможет.

person Dangerous    schedule 11.11.2011
comment
Спасибо! Я рассмотрю эти! - person Ann L.; 15.11.2011

Я думаю, что Расширение аннотаций данных Скотта Киркланда делает именно то, что вам нужно. Вот сообщение в блоге он написал о своих расширениях.

Базовая библиотека предоставляет атрибуты проверки на стороне сервера, которые можно использовать в любом проекте .NET 4.0 (без зависимости от MVC). Существует также легко подключаемая библиотека проверки на стороне клиента, которую можно использовать в проектах ASP.NET MVC 3 с помощью ненавязчивой проверки jquery (требуются только файлы javascript, включенные в MVC3).

person Ron Sijm    schedule 10.11.2011
comment
Большое тебе спасибо! Но... насколько я могу судить, это все проверки на уровне свойств. Я надеялся найти что-то, что я мог бы использовать на уровне модели для сложных ситуаций с несколькими полями. Однако большое спасибо! - person Ann L.; 11.11.2011

Если я правильно понял, mvc 3 действительно включает проверку jquery на стороне клиента. Во-первых, для проверки на стороне сервера на уровне модели вы можете переопределить функцию isValid по умолчанию своими собственными правилами проверки, что-то вроде этого (включая несколько полей):

 public sealed class PropertyAAttribute : ValidationAttribute
{
    public string propertyBAttribute { get; set; }
    public override bool IsValid(object value)
    {
        // Your validation rule here
    }
}

[PropertyA(propertyBAttribute = "PropertyB")]
public object PropertyA {get;set;}
public object PropertyB {get;set;}

Затем, чтобы иметь дело с клиентской стороной, вы можете просто использовать включенную функцию проверки jquery:

            var frm = $('#formData');

            frm.validate();

Таким образом, у вас будет сообщение об ошибке на стороне клиента на основе правила, которое вы определили в модели. Надеюсь, это то, что вам нужно :)

person shennyL    schedule 10.11.2011
comment
Спасибо! Я расследую это! - person Ann L.; 15.11.2011