将默认内容放在MVC应用程序中的最佳位置是什么?

时间:2009-03-02 23:21:48

标签: c# asp.net-mvc model-view-controller

我正在开发一种CMS / Wiki应用程序,以帮助我尝试新的Asp.Net MVC框架,我正试图围绕一些代码组织。

现在,我有三个视图,包括显示文章:索引,编辑和重命名。所有三个视图都显示当前页面的内容,或占位符内容,表明该页面不存在。

目前,每个视图的操作方法中都有以下代码:

MyPage myPage = null;

if (!string.IsNullOrEmpty(pageName)) {
    myPage = mRepository.GetMyPage(pageName);
}

//Page does not exist.
if (myPage != null) {
    ViewData["pageContent"] = myPage.GetParsedSource(new PageState());
    ViewData["pageSource"] = myPage.Source;
    ViewData["title"] = myPage.Title;
}
else {
    ViewData["title"] = pageName;
    ViewData["pageContent"] = "Page does not exist, feel free to create it!";
    ViewData["pageSource"] = "";
}

ViewData["pageName"] = pageName;

我的问题是,这个逻辑究竟应该去哪里?

1)控制器(现在如此),它需要跨操作方法复制上述代码?
2)模型,将pageSource的值默认为上面显示的措辞?这会将显示文本移动到模型中 3)View,使用空合并运算符将null ViewData条目转换为默认值?
4)在视图中,但添加其他控制器来处理pageName不存在的情况。


编辑: 希望这应该澄清一点。申请流程如下: 当用户输入URL(即/ pages / page_title)时,他们到达显示文章内容的屏幕,以及标记为“编辑”和“重命名”的超链接。

单击编辑会显示包含文章内容的页面,以及用于编辑文章来源的表单控件。

单击重命名会显示包含文章内容的页面,以及用于编辑文章名称的表单控件。

2 个答案:

答案 0 :(得分:1)

我会采取以下几项行动:

  • 查找
  • 显示
  • 创建
  • 修改
  • 重命名

在默认的Lookup控制器操作中(当用户请求“/ wiki / article-title”时会触发),您可以根据需要将(RedirectToAction())重定向到相应的操作。这会将您的Create逻辑封装到自己的控制器中,也可以直接调用(RESTful)。与其他人一样。这也可以让你保持你的观点非常非常愚蠢(总是一件好事)。

答案 1 :(得分:1)

我会将它保留在控制器中但是将其解压缩出来,这样您就不必在每个操作中复制代码。

也许在控制器的构造函数中设置一些默认值,然后有一个单独的私有方法(即不是动作方法),它接受你的MyPage对象并设置你的动作之间共享的viewdata。