ASP.NET MVC portal / CMS - дизайн контроллеров и виджетов? - PullRequest
0 голосов
/ 28 июля 2010

В настоящее время я работаю над порталом, используя jQuery portlets / sortable / draggable, который также включает систему управления контентом, все в ASP.NET MVC 2. Только администраторы могутизменить макет / содержание сайта в настоящее время.

Каждое представление получает персонализацию для страницы (из базового контроллера) на основе Controller и Action.Затем представление перебирает виджеты и вызывает рендеринг для каждого из них.

В настоящее время у меня есть действия View + "Edit" для каждого вида, чтобы перевести страницу в режим редактирования.Поскольку я дублирую код, должен быть лучший способ, но я не вижу его на всю жизнь!

Как бы вы реализовали действие, позволяющее редактировать каждый вид?

public ActionResult Legal()
{
    PageModel model = GetPageSetting();
    return View("Portal", model.PageSetting.Master.Path, model);
}

[HttpPost]
[Authorize(Roles = "Administrator")]
public ActionResult LegalEdit(EditorModel e)
{
    PageModel model = GetPageSetting("Legal", "Home", true);
    return View("Portal", model.PageSetting.Master.Path, model);
}

// Это базовый контроллер

protected PageModel GetPageSetting(string action, string controller, bool isEditing)
{
    PersonalizationProcess personalizationProcess = new PersonalizationProcess();

    string path = string.Format("~/{0}/{1}", controller, action);
    string userName;
    bool isAuthenticated;

    if (User == null)
    {
        userName = "TestUser";
        isAuthenticated = false;
    }
    else
    {
        userName = User.Identity.Name;
        isAuthenticated = User.Identity.IsAuthenticated;
    }

    PageSetting setting = personalizationProcess.GetPageSetting(userName, isAuthenticated, path);
    PageModel model = new PageModel();
    model.Act = action;
    model.Con = controller;
    model.IsEditing = isEditing;
    model.PageSetting = setting;
    return model;

1 Ответ

0 голосов
/ 28 июля 2010

Не глядя на код, сложно дать вам конкретный совет о том, как избежать дублирования кода.Но в целом вы хотите «Извлечь метод / Извлечь класс», пока не сможете больше извлекать:) ... Кроме того, вы можете использовать часть инфраструктуры MVC, чтобы помочь вам сделать часть повторяющегося кода, т.е.ModelBinders и ActionFilters.

Может быть, вы можете опубликовать некоторые коды просмотра / редактирования действий, чтобы направить вас в лучшем направлении

...