Проверка на стороне клиента ASP.NET MVC с помощью MvcContrib FluentHtml

Какой рекомендуемый способ выполнить проверку на стороне клиента с использованием встроенного кода MVC2 с построителями FluentHtml MvcContrib? Мы используем код проверки на стороне клиента jQuery, а не стандартный материал Microsoft AJAX, если это имеет значение (хотя я не думаю, что это должно быть).

Кажется, что проверка на стороне клиента регистрируется с помощью jQuery Validate только тогда, когда вы помещаете сообщение проверки (Html.ValidationMessageFor(x => x.FirstName)) на страницу. FluentHtml this.ValidationMessage(x => x.FirstName) MvcContrib работает только с ModelState на стороне сервера, не записывает HTML-код, если нет ошибки, и не регистрирует данное свойство с помощью jQuery Validate на стороне клиента.

Итак, мой вопрос: есть ли способ заставить текущую сборку MvContrib безболезненно работать со встроенной проверкой на стороне клиента MVC2 прямо сейчас? Если да, то как? Если нет, то рекомендуется ли другая проверка на стороне клиента (кроме xVal, которую мы сейчас используем и которая была обесценена)? Следует ли это исправить в MvcContrib, чтобы он работал правильно? В крайнем случае можно было бы перейти к использованию встроенных построителей ввода ASP.NET MVC, но мы уже много вложили в MvcContrib и не хотели бы этого делать.

Спасибо!


person Darrell Mozingo    schedule 05.11.2010    source источник


Ответы (2)


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

http://lunaverse.wordpress.com/2008/11/24/mvcfluenthtml-fluent-html-interface-for-ms-mvc/

Если вы можете понять это, было бы хорошо опубликовать его здесь.

Павел

person Paul Hinett    schedule 06.11.2010

Я получил комментарий из этой статьи в блоге, работая с Полом, и изменил его, чтобы использовать все известные адаптеры проверки MVC, а не только требуемый (в основном имитируя большую часть того, что находится в самой структуре). Становится странно, как он отображает сообщение об ошибке и работает с тем, что у нас уже есть, и я реализовал патч для MVC Contrib, чтобы работать с ним, но в конце концов я сдаюсь, пока MVC3 не будет завершен, а MVC Contrib строит против этого. Нет смысла проходить через все это, когда скоро выйдет обновленный релиз.

Вот что у меня получилось (FluentViewPage<T> здесь мы добавляем поведения):

public class ClientsideValidationBehavior<T> : IBehavior<IMemberElement> where T : class
{
    private readonly FluentViewPage<T> _viewPage;

    public ClientsideValidationBehavior(FluentViewPage<T> viewPage)
    {
        _viewPage = viewPage;
    }

    public void Execute(IMemberElement element)
    {
        var attribute = element.GetAttribute<ValidationAttribute>();

        if (attribute == null)
        {
            return;
        }

        var formContext = _viewPage.ViewContext.FormContext;
        var fieldMetadata = formContext.GetValidationMetadataForField(UiNameHelper.BuildNameFrom(element.ForMember), true);

        var modelMetadata = ModelMetadata.FromStringExpression(element.ForMember.Member.Name, _viewPage.ViewData);
        var validators = ModelValidatorProviders.Providers.GetValidators(modelMetadata, _viewPage.ViewContext);

        validators.SelectMany(v => v.GetClientValidationRules()).ForEach(fieldMetadata.ValidationRules.Add);

        fieldMetadata.ValidationMessageId = element.ForMember.Member.Name + "_Label";
    }
}

Надеюсь, это кому-то поможет.

person Darrell Mozingo    schedule 09.11.2010