Arhn - архитектура программирования

Избегайте строковых литералов при использовании ModelState.AddModelError

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

ModelState.AddModelError("PropertyName", "Validation Message");

Есть ли рекомендуемая практика, которая не использует строковый литерал в контроллере для имени свойства?

Я использую .Net 4.5 и не хочу обновляться до .Net 4.6. Я использую Visual Studio 2013 и не хочу обновляться до Visual Studio 2015.


Ответы:


1

В C# 6 представлен оператор nameof, так что вы можете делать следующее:

ModelState.AddModelError(nameof(this.PropertyName), "Validation Message");

Однако для этого требуется Visual Studio 2015.

21.12.2015
  • Спасибо за быстрый ответ РБ. Однако я использую .net 4.5 и не хочу обновляться до .net 4.6. Я обновил вопрос, чтобы включить эту информацию. 21.12.2015
  • Это функция компилятора С# 6, а не функция .NET 4.6. Вы можете запускать код с помощью оператора nameof в .NET 4.0 и более поздних версиях (я почти уверен, что вы можете ориентироваться на любую версию фреймворка, но я тестировал .NET 4.0...!) 21.12.2015
  • Спасибо еще раз. Я также использую Visual Studio 2013 и не хочу обновляться до Visual Studio 2015. 21.12.2015

  • 2

    Я думаю, что это может быть достигнуто следующим образом:

    1) Определите базовый контроллер, который наследует Controller:

    class BaseController<TCtr> : Controller
    

    2) Ваш фактический элемент управления наследует BaseController вместо Controller:

    class YourController : BaseController<TCtr>
    

    3) Определите следующую функцию в вашем BaseController:

    protected virtual void AddModelError<TProp>(Expression<Func<TCtr, TProp>> expression, String message)
        {
            var prop = (MemberExpression)expression.Body;
            ModelState.AddModelError(prop.Member.Name, message);
        }
    

    Это позволяет вам написать что-то вроде этого в вашем контроллере:

    AddModelError(ctrl => SomeProperty, "Validation failed");
    
    21.12.2015
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..