Область администрации у Asp. Сетевой MVC

Вы можете ввести свой пароль в полном порядке. Введите пароль и нажмите ввод. Интерфейс командной строки в MacOS (и большинство других командных строк) не отображает звездочки (*) при вводе пароля (как и следовало ожидать), и вместо этого кажется, что вы ничего не печатаете.

27
задан Yannick Blondeau 25 July 2012 в 08:55
поделиться

7 ответов

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

14
ответ дан 28 November 2019 в 05:52
поделиться

Я бы просто создал новый веб-сайт MVC, который будет заниматься администрацией. У вас есть более гибкое решение, если вы разделяете данные и бизнес-логику в разных сборках. Затем вы можете опубликовать свой сайт на поддомене, например, admin.yoursite.com. Таким образом, вам не нужно связываться с вашими маршрутами, и вы можете держать их в отдельных представлениях, что является наиболее элегантным решением imho. Про и Кон было бы приятно услышать.

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

1
ответ дан Peter 28 November 2019 в 05:52
поделиться

Предлагаю использовать это решение .

Но я изменил определение на это:

    public ThemedViewEngine()
    {
        base.MasterLocationFormats = new string[] {
            "~/Views/{1}/{0}.master", 
            "~/Views/Shared/{0}.master",
            "~/Themes/{2}/Views/{1}/{0}.master", 
            "~/Themes/{2}/Views/Shared/{0}.master",
            "~/Themes/Default/Views/{1}/{0}.master", 
            "~/Themes/Default/Views/Shared/{0}.master"
        };
        base.ViewLocationFormats = new string[] { 
            "~/Views/{1}/{0}.aspx", 
            "~/Views/{1}/{0}.ascx", 
            "~/Views/Shared/{0}.aspx", 
            "~/Views/Shared/{0}.ascx",
            "~/Themes/{2}/Views/{1}/{0}.aspx", 
            "~/Themes/{2}/Views/{1}/{0}.ascx", 
            "~/Themes/{2}/Views/Shared/{0}.aspx", 
            "~/Themes/{2}/Views/Shared/{0}.ascx",
            "~/Themes/Default/Views/{1}/{0}.aspx", 
            "~/Themes/Default/Views/{1}/{0}.ascx", 
            "~/Themes/Default/Views/Shared/{0}.aspx", 
            "~/Themes/Default/Views/Shared/{0}.ascx" 
        };
        base.PartialViewLocationFormats = new string[] {
            "~/Views/{1}/{0}.aspx",
            "~/Views/{1}/{0}.ascx",
            "~/Views/Shared/{0}.aspx",
            "~/Views/Shared/{0}.ascx",
            "~/Themes/{2}/Views/{1}/{0}.aspx",
            "~/Themes/{2}/Views/{1}/{0}.ascx",
            "~/Themes/{2}/Views/Shared/{0}.aspx",
            "~/Themes/{2}/Views/Shared/{0}.ascx",
            "~/Themes/Default/Views/{1}/{0}.aspx",
            "~/Themes/Default/Views/{1}/{0}.ascx",
            "~/Themes/Default/Views/Shared/{0}.aspx",
            "~/Themes/Default/Views/Shared/{0}.ascx"
        };
    }

Тема по умолчанию - это тема по умолчанию, поэтому она должна существовать.

Структура каталога будет такой:

  • Содержимое
  • Темы
    • По умолчанию
      • Содержимое
      • Просмотры
        • Главная страница
        • Блог
        • Что бы ни было скином
        • OtherTheme
          • Содержимое
          • Просмотры
            • Главная страница
            • Блог
            • Все, что должно быть обложено кожей
          • Просмотров
            • Статьи
            • Сообщений
            • Пользователи
            • Настройки
            • Другие административные материалы
0
ответ дан dariol 28 November 2019 в 05:52
поделиться

Ответ зависит от того, насколько функциональными будут контроллеры. Просто начните с одного контроллера, а если его станет слишком много, разделите его на несколько. Самое замечательное в MVC - это то, что вы помещаете вещи в свои контроллеры, и это не должно влиять на URL-адреса. вы можете очень легко сопоставить / Users / Create, например, с классом UserAdminController.

1
ответ дан 28 November 2019 в 05:52
поделиться

Для этого можно использовать DynamicData . Это не MVC, но его можно использовать вместе с ним, и его действительно легко настроить и использовать.

0
ответ дан 28 November 2019 в 05:52
поделиться

Как обсуждает Мэтью Уилсон в Imperfect C ++ , это можно использовать для обеспечения безопасности типов в C ++, предотвращая использование DIMENSION_OF () -подобных макросы с экземплярами типов, которые определяют оператор нижнего индекса, например:

#define DIMENSION_OF_UNSAFE(x)  (sizeof(x) / sizeof((x)[0]))

#define DIMENSION_OF_SAFER(x)  (sizeof(x) / sizeof(0[(x)]))

int ints[4];

DIMENSION_OF_UNSAFE(ints); // 4
DIMENSION_OF_SAFER(ints); // 4

std::vector v(4);

DIMENSION_OF_UNSAFE(v); // gives impl-defined value; v likely wrong
DIMENSION_OF_SAFER(v); // does not compile

Здесь есть еще кое-что, для работы с указателями, но это требует некоторых дополнительных умений шаблона. Ознакомьтесь с реализацией STLSOFT_NUM_ELEMENTS () в библиотеках STLSoft и прочтите обо всем этом в главе 14 Imperfect C ++ .

edit: some of комментаторы предполагают, что реализация не отклоняет указатели. Он работает (как и пользовательские типы), как показано в следующей программе. Вы можете проверить это по раскомментированным строкам 16 и 18. (я только что сделал это на Mac / GCC4, и он отклоняет обе формы). It works pretty well with only the Administration Controller (/Administration/CreateUser/id)... but it becomes a big mess when I use different controller as User or Article (/User/DeleteUser/id or /Article/Details/id).

I'd prefer to use one controller per entity, but I can't find a way to bond this approach with multiple controllers.

0
ответ дан 28 November 2019 в 05:52
поделиться

В настоящее время я использую ASP.NET для большого клиента.

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

Пример

Я также пишу административный раздел. Будет один контроллер администрирования (у нас небольшой административный раздел, если бы он был больше, я бы изменил маршрутизацию, чтобы разрешить больше контроллеров, пока мы используем готовую конфигурацию). Если я создам представление «EditUser». Я также создам класс EditUserAction . Весь код EditUser войдет в класс. Я создаю класс EditUserAction в классе контроллера администрирования в методе Edit User. Это удаляет весь код конкретного действия из класса Controller. Таким образом, весь код конкретного действия находится либо в методе действия, либо в классе действия. В противном случае контроллер быстро переполнится кодом от различных действий. Класс контроллера за короткое время превратился бы в неуправляемый беспорядок.

Примеры классов

public class Administration: Controller
{
    public ActionResult EditUser(string userId)
    {
        EditUserAction action = new EditUserAction();
    }
}

public class EditUserAction
{
    public void Save(User user)
    {   
        //save code here
    }
}

Я надеюсь, что это объяснение понятно. Если этого не произойдет, дайте мне знать, и я поясню.

На ответьте на ваш вопрос, я делаю это вторым ( / Administration / CreateUser / id или / Administration /DeletePost/id).

1
ответ дан 28 November 2019 в 05:52
поделиться
Другие вопросы по тегам:

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