代码之家  ›  专栏  ›  技术社区  ›  Rei Miyasaka

在ASP.NET MVC中构造几个主要是静态页面

  •  4
  • Rei Miyasaka  · 技术社区  · 14 年前

    可能不是一个非常重要的问题,但是…

    我有很多静态页面:联系人、关于、使用条款,还有大约7-8个。

    每一个都应该有自己的控制器,还是我应该为每个控制器都有一个操作?

    事先谢谢。

    4 回复  |  直到 12 年前
        1
  •  2
  •   Kelsey    14 年前

    只需单独考虑每个项目。如果您认为即使是最微小的机会,操作/视图可能被要求不仅仅是静态数据,那么现在就将其分解,否则您将不得不担心在将来断开客户/访问者/搜索引擎已保存/索引的链接,现在您将需要维护一些重定向等。

    如果您确定它永远不会改变(ha说永远不会),那么使用一个具有多个操作/视图的控制器。如:

    http://yoursite.com/home/contact
    http://yoursite.com/home/terms
    http://yoursite.com/home/about
    etc...
    

    这将使您的项目免受非常基本数据的混乱,假设您将拥有许多其他代码。如果大多数代码只是这些页面,那么您应该将其分解,因为无论如何都没有什么可以混乱的地方。

        2
  •  7
  •   amd    13 年前

    将静态页面添加到MVC应用程序的最佳方法是创建一个名为 Pages (或任何你想要的)并将页面名称传递给他们 Index 方法作为参数。 因此,在呈现之前需要测试页面是否存在,如果存在,则呈现它,否则呈现自定义 Page Not Found 页。 下面是一个例子:

    在Axal.Axax中:

    // put the StaticPage Rout Above the Default One
                    routes.MapRoute(
                        "StaticPages",
                        "Pages/{page}",
                        new { controller = "Pages", action = "Index"}
                        );
    
                    routes.MapRoute(
                        "Default",
                        "{controller}/{action}/{id}",
                        new { controller = "Home", action = "Index", id = UrlParameter.Optional}
                        );
    

    创建名为pagesController的控制器:

    public class PagesController : Controller
    {
        public ActionResult Index(string page)
        {
    
            // if no paramere was passed call the default page
            if (string.IsNullOrEmpty(page)) {
                page = "MyDefaultView";
            }
    
            // Check if the view exist, if not render the NotfoundView
            if (!ViewExists(page)) {
                page = "PageNotFoundView";
            }
    
            return View(page);
        }
    
    
        // function that check if view exist 
        private bool ViewExists(string name)
        {
            ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null);
            return (result.View != null);
        }
    }
    
        3
  •  3
  •   Bikal Lem    14 年前

    ASP.NET MVC中建议的用例是 控制器 每个型号和单独的 动作方法 在控制器上,根据 涉及 例如,为编辑、创建、检索和删除操作。

    然而,在这个用例中,由于您提到了所有您拥有的都是静态页面,所以似乎可以通过使用一个控制器和对应于每个视图的单独操作方法来完成该工作。可以这样实现,

    public HomeController : Controller
    {
        public ActionResult About()
        {
            return View();
        }
    
        public ActionResult TermsOfUse()
        {
            return View();
        }
    
        public ActionResult Contact()
        {
            return View();
        }
    
        // etc ........
    }
    

    HomeController 在此处选择,因为它默认位于ASP.NET MVC项目中,并连接到中的默认路由 Global.asax.cs 文件。

        4
  •  1
  •   Kyle Nunery    14 年前

    让一个控制器为每个页面执行一个操作并没有什么坏处。我可能会制作一个带有ActionResult和相应的ASPX视图的主控制器,用于联系人、关于、使用条款等。对于这个简单的例子,如果您希望对URL进行更多的控制,或者有一个合理的控制器逻辑分组,那么您可能希望将其分解为2个或更多的控制器。