Nano Hash - криптовалюты, майнинг, программирование

Как подготовить модели в MVC с активацией и деактивацией аннотаций данных?

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

Скажем, имя требуется в 1-м представлении. То же поле не требуется во втором представлении. Как мне нужно подготовить собственный атрибут проверки? Или мне нужно предоставить интерфейс проверки? Пожалуйста, помогите мне.



Ответы:


1

Расширение потрясающего ответа Питера Кисс

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

public class UserModel
{
    public int ID { get; set; }
    public virtual string FirstName { get; set; } // Notice the virtual?
    public string LastName { get; set; }
}

// Used for creating a new user.
public class InsertUserModel : UserModel
{
    [Required]
    public override string FirstName { get; set; } // Notice the override?
}

// Used for updating a user.
public class UpdateModel : UserModel
{
    // Custom validation
    [FirstNameUnique("This name is already taken.")]
    public override string FirstName { get; set; }
}

Важно

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

Пользовательская проверка

using System.ComponentModel.DataAnnotations;
public class FirstNameUniqueAttribute : ValidationAttribute
{
    public FirstNameUniqueAttribute(string errorMessage)
    {
        this.ErrorMessage = errorMessage;
    }

    public override bool IsValid(object value)
    {
        string firstName = value as string;

        // This condition is for properties with validations
        // but not required. Kinda like [StringLength], with
        // validation but not required.                                                           
        if (string.IsNullOrEmpty(firstName))
        {
            return true;
        }

        // Put validation logic here.

        return valid;
    }
}
08.03.2014

2

Это называется наследованием.

Вы можете создать конечный базовый класс без аннотаций, а затем переопределить каждое виртуальное свойство атрибутами, которые хотите использовать. Обработка представления инфраструктуры ASP.NET MVC не работает с типом среды выполнения объекта, а использует скомпилированный тип (@model YourViewModelType).

08.03.2014
  • Спасибо, Питер Кисс... Есть какая-нибудь справочная ссылка? 08.03.2014
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..