【问题标题】:What's the best place to put default content in an MVC application?在 MVC 应用程序中放置默认内容的最佳位置是什么?
【发布时间】:2009-03-02 23:21:47
【问题描述】:

我正在开发一种 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) 视图,使用 null 合并运算符将 null ViewData 条目转换为其默认值?
4) 在视图中,但添加额外的控制器来处理 pageName 不存在的情况。


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

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

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

【问题讨论】:

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


    【解决方案1】:

    我会有几个动作:

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

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

    【讨论】:

    • 换句话说,您会将 Index 视图分为 Index 和 Create,默认文本直接包含在 Create .aspx?如果我希望编辑和重命名视图显示与创建和索引相同的内容,您建议如何处理这些内容?
    • 不确定您在问什么...我会将完全相同的数据(文章对象)传递给所有视图。由视图决定如何处理它......例如,Create 会期望一个带有 Title 的大部分为空的对象。编辑视图将有一个文本框并期望文章内容。等等。
    • 澄清了这个问题,但我想我明白你在说什么。当我们查看不存在的条目但不对其进行编辑时,我需要添加一个额外的控制器(超出您列出的范围)来处理这种情况。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 2010-10-31
      相关资源
      最近更新 更多