2010-07-27 5 views
0

Je travaille actuellement sur un portail utilisant jQuery portlets/sortable/draggable qui comprend également un système de gestion de contenu, le tout dans ASP.NET MVC 2. Seuls les administrateurs sont en mesure de modifier la mise en page/contenu du site actuellement.ASP.NET MVC portail/CMS - conception de contrôleur et de widget?

Chaque vue obtient la personnalisation d'une page (à partir du contrôleur de base) en fonction du contrôleur et de l'action. Ensuite, la vue passe à travers les widgets et appelle l'action de rendu pour chacun d'entre eux.

Actuellement, j'ai des actions View + "Edit" sur chaque vue pour mettre la page en mode d'édition. Comme je duplique du code, il doit y avoir un meilleur moyen, mais je ne peux pas le voir pour la vie de moi!

Comment implémenteriez-vous une action qui permet à chaque vue d'être éditée?

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); 
} 

// Ceci est dans le contrôleur de base

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; 

Répondre

0

Sans regarder le code, est difficile de vous donner des conseils précis sur la façon d'éviter la duplication de code. Mais en général, vous voulez "Extract Method/Extract Class" jusqu'à ce que vous ne pouvez plus extraire:) ... Aussi, vous pouvez utiliser une partie de l'infrascructure MVC pour vous aider à faire du code répétitif, par exemple. ModelBinders et ActionFilters.

Peut-être que vous pouvez poster certains de la vue/modifier le code des actions pour vous orienter dans une meilleure direction

+0

J'ai ajouté le code pour une vue sur la page du portail. Le site doit aussi être SEO, donc je ne peux pas simplement rendre les widgets et faire des ajax callbacks non plus. –

Questions connexes