【问题标题】:ASP.NET MVC portal/CMS - controller and widget design?ASP.NET MVC 门户/CMS - 控制器和小部件设计?
【发布时间】:2011-03-21 19:44:13
【问题描述】:

我目前正在使用jQuery portlets/sortable/draggable 开发一个门户,该门户还包括一个内容管理系统,全部在ASP.NET MVC 2. 目前只有管理员能够更改站点的布局/内容。

每个视图都基于 Controller 和 Action 获得页面的个性化(来自基本控制器)。然后视图循环遍历小部件并为每个小部件调用 renderaction。

目前,我在每个视图上都有查看 +“编辑”操作,以将页面设置为编辑模式。因为我在复制代码,所以肯定有更好的方法,但我一辈子都看不到它!

您将如何实现允许编辑每个视图的操作?

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;

【问题讨论】:

    标签: jquery asp.net-mvc-2 content-management-system portal


    【解决方案1】:

    如果不查看代码,很难就如何避免代码重复给出具体建议。但一般来说,你想“提取方法/提取类”,直到你不能再提取了:)......此外,你可以使用一些 MVC 基础设施来帮助你做一些重复的代码,即。 ModelBinders 和 ActionFilters。

    也许您可以发布一些查看/编辑操作的代码来为您指明更好的方向

    【讨论】:

    • 我已经为门户页面的一个视图添加了代码。该网站也必须是 SEO,所以我不能只渲染小部件并进行 ajax 回调。
    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 2011-03-10
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2011-07-13
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多