在这种情况下我应该如何构建我的mvc 3应用程序?

时间:2012-03-21 11:56:17

标签: asp.net .net asp.net-mvc-3 coding-style

我正在尝试使用mvc创建一个简单的网站,但我对如何构建所有内容感到有点困惑。对于这类事情有没有指导方针?

我遇到的困难是知道如何处理很多嵌套页面,以及如何使用ViewModels,或者

我以前在MVC中建立了一个网站,但它非常简单:总共只有大约5页,因此构建起来并不困难。在我目前的情况下,我正在尝试构建一个具有多个嵌套页面的站点,我想知道我是如何构建它的。

例如,如果我有这样的结构:

                                        Home
                                          |
                        About -------- Contact---------- Products
                          |
                          |
           The Board -- What we do
             |
             |
 person1 -- person2 -- person3

我应该如何设置我的网站结构?

我的直觉是我应该有一个AboutController,一个ContactController和一个ProductsController。然后我在AboutController中有两个名为'TheBoard'和'WhatWeDo'的ActionResults,但是我如何处理'TheBoard'的嵌套页面?如果我有更多页面嵌套在这下面怎么办?我会嵌套控制器吗?

此外,即使这个虚拟网站不需要它,如果我想共享ViewModels怎么办?我假设ViewModel可以跨页面共享(假设需要相同的功能)。或者这是不好的做法?是否应为每个页面创建一个新的ViewModel?

如果我没有很好地解释这一点,请道歉。基本上我正在寻找的是关于如何构建包含大量页面的MVC 3 Web应用程序的任何资源。是否有任何应遵循的基本原则?我已经按照asp.net网站上的大部分教程进行了操作,但实际上没有关于最佳实践的指南。

有什么想法吗?

由于

编辑:只是为了澄清,如果我使用webforms构建此站点,我可能会有一个default.aspx页面,其中包含About,Contact,Products文件夹以及其中的任何嵌套页面/文件夹。我想我想弄清楚我在MVC中是怎么做到的?

2 个答案:

答案 0 :(得分:2)

我同意Darin您需要描述网站的功能。如果您要做的只是管理内容,那么最好使用像Orchard这样开箱即用的CMS。您可以使用这样的CMS来创建链接页面的任意结构。

你的评论“但是,如果我想进一步走一级怎么办?”听起来像是对这个项目的要求尚不清楚。您可以随后进行扩展和重构。目前,只需实施客户设定的要求即可。

最初,在将注意力转向“正确构建”之前,请确保“正确构建它”。

回复评论

听起来你担心导航和网址结构。在MVC中,您的URL结构可以完全独立于您的控制器组织。 MVC中没有“控件”的概念。有HTML帮助程序,但在webforms意义上没有服务器控件的控件。

例如,如果您想要/ board / members / jim / bio / resume / company1 / edit,那是完全可能的。 ResumeCompanyEdit操作所在的控制器无关紧要,因为您可以定义自定义路由以链接您想要此操作的URL。

对于面包屑,您可以手动创建它们,或者根据您的自定义URL架构编写自定义HtmlHelper来为您呈现面包屑。

答案 1 :(得分:1)

我提到了一个AboutController,一个ContactController,一个ProductController

AboutController可以有一个Action Person。

在global.asax中设置路由,如下所示:

        routes.MapRoute(
            "AboutPerson", // Route name
            "about/board/{personName}", // URL with parameters
            new { controller = "About", action = "Person"} 
        );

Person动作应如下所示:

    public ActionResult Person(string personName) {
         // Code to get person data from DB - if required
         var person = db.GetPerson(personName);
         return View(person);
}

如果页面是静态的,只需拥有不同的视图并检查personName并返回相关视图:例如

return View("BoardMember1");

BoardMember1.cshtml / aspx是视图/关于目录中的视图