ASP.NET MVC 2 Аннотирования данных в динамично сгенерированной модели

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

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

Так, что делает Вас, парни рекомендуют мне сделать в этом сценарии? Я не могу добавить атрибуты статически, таким образом, я должен идти вперед и попытаться добавить их динамично, даже если это - большая работа, или я должен попытаться использовать другой подход?

Заранее спасибо!

Felipe

8
задан Felipe Lima 13 February 2010 в 02:12
поделиться

3 ответа

Подшивка пользовательской модели поможет вам только в части привязки. Это не поможет с шаблонными помощниками или другими функциями ASP.NET MVC.

Я рекомендую вместо этого написать собственного поставщика метаданных , унаследовав его от ModelMetadataProvider и зарегистрировав своего поставщика в global.asax с помощью ModelMetadataProviders . Пользовательский поставщик метаданных может получать свои метаданные откуда угодно: из атрибутов CLR, XML-файла, базы данных или генератора случайных чисел. Встроенный провайдер аннотаций к данным, конечно же, использует атрибуты CLR.

Возможно, вы захотите взглянуть на исходный код встроенного поставщика метаданных Data Annotations, чтобы увидеть пример того, как реализовать поставщика. Вы можете загрузить исходный код ASP.NET MVC 2 RC 2 с сайта CodePlex . Также может быть реализация в проекте MVC Futures, но я не уверен.

3
ответ дан 6 December 2019 в 00:55
поделиться

Вы можете использовать анонимную функцию в matlab (аналогично лямбда-функциям в других языках):

u = 1.2;
[t y] = ode45(@(t, y) ypdiff(t, y, u), [to tf], yo);
-121--3383524-

Звучит как overkill (если я правильно понимаю) - это создает модели на лету. Вы не используете основное преимущество наличия моделей; компилируйте проверки времени.

Я бы попытался использовать объекты, специфичные для задачи (например, класс UserForm, который будет иметь список классов UserFormFields и так далее) в руках и не создавать их на лету.

Изменить: Я предлагаю не использовать проверку на основе атрибутов и проектировать модель с учетом проверки. Конструкция, подобная приведенной ниже, может объяснить мою точку зрения лучше:

interface IUserValidation
{
    bool IsValid();
}

class RequiredUserValidation : IUserValidation
{
    public bool IsValid()
    {
        // ....
    }
}

class UserFormField
{
    List<IUserValidation> _validations;

    public IEnumerable<ValidationResult> Validate()
    {
       // ...
    }
}
-121--3740422-

Кажется, что вам нужна пользовательская привязка модели представления, которая динамически применяет проверку.

0
ответ дан 6 December 2019 в 00:55
поделиться

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

Я бы попытался использовать объекты, специфичные для задачи (например, класс UserForm, который будет иметь список классов UserFormFields и т. Д.), А не создавать их на лету.

Изменить: Я предлагаю не использовать проверку на основе атрибутов и проектировать модель с учетом проверки. Пример ниже может лучше объяснить мою точку зрения:

interface IUserValidation
{
    bool IsValid();
}

class RequiredUserValidation : IUserValidation
{
    public bool IsValid()
    {
        // ....
    }
}

class UserFormField
{
    List<IUserValidation> _validations;

    public IEnumerable<ValidationResult> Validate()
    {
       // ...
    }
}
0
ответ дан 6 December 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: