2009-03-02 65 views
0

我正在研究一种CMS/Wiki应用程序,以帮助我尝试新的Asp.Net MVC框架,并且试图围绕一些代码组织进行研究。将默认内容放入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)视图,使用空合并运算符将空ViewData条目转换为其默认值?
4)在视图中,但添加额外的控制器来处理pageName不存在的情况。编辑: 希望这应该澄清一点事情。应用程序流程如下: 当用户输入一个URL(即/ pages/page_title)时,他们到达一个显示文章内容的屏幕,以及标有“编辑”和“重命名”的超链接。

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

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

回答

1

我想有几个动作:

  • 查找
  • 显示
  • 创建
  • 编辑
  • 重命名

在默认查找控制器动作(这被击中时用户要求说,“/ wiki /文章标题”),你可以r根据需要将转接(RedirectToAction())转换为适当的操作。它将你的Create逻辑封装到自己的控制器中,也可以直接调用(RESTful)。与其他人一样。这也可以让你保持你的观点非常非常愚蠢(总是一件好事)。

+0

换句话说,您可以将索引视图分离为索引和创建,默认文本直接包含在Create .aspx?如果我想让“编辑”和“重命名”视图显示与“创建和索引”相同的内容,您会如何建议处理这些内容? – AaronSieb 2009-03-02 23:32:11

1

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

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

相关问题