我可以使用一个名为MVC 4的控制器吗?

时间:2014-12-27 20:25:27

标签: .net asp.net-mvc asp.net-mvc-4 controllers

很抱歉,如果这是一个总的noob问题,但我正在尝试创建特定于“年份”的控制器来显示内容。

当我尝试创建“2015Controller”时,它会在数字前面插入一个下划线,然后在视图名称后面插入一个下划线。 (不是我正在寻找的友好网址。)

也许我是一个完整的涂料,并且已经错过了这个,但我想将内容分成基于年份的页面显示,因为我有多年的内容,我希望通过简单的方式访问网址。

3 个答案:

答案 0 :(得分:3)

这听起来像XY Problem

我可以高度肯定地说,你应该每年创建一个新的控制器。这会给你带来巨大的维护负担和臃肿的代码(你必须每年创建一个新的控制器和一个新的控制器类。)

你应该创建一小组控制器(甚至可能只有一个),添加通过URL传递年份的能力,并设计它们以根据指定的年份动态加载和提供内容。

以下是通过网址"来完成今年传递的方法。一部分。

将其添加为RouteConfig.cs中的第一个路径:

routes.MapRoute(
    name: "Year",
    url: "{year}/{action}/{id}",
    defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional},
    constraints: new{ year = @"\d{4}" });

这告诉路由模块,无论何时URL进入以4位开头,它都应该将该请求发送到Home控制器(如果需要,可以更改),并传递这4位数字作为名为year的路由值。

然后,在HomeController中,您可以继续在行动中添加year作为参数:

public ActionResult Index(string year)
{
    // use year to fetch and prepare content
    return View();
}

public ActionResult Schedule(string year)
{
    // use year to fetch and prepare content
    return View();
}

因此,如果访问者导航到http://mydomain/2015http://mydomain/2015/Index,则该请求将发送到Index year值为2015的操作。如果访问者导航到http://mydomain/2016/Schedule,则该请求将发送到Schedule year值为2016的操作。

所以,你应该全力以赴。如果要根据年份区分视图,可以添加多个视图,并将所需的值传递给View()帮助程序以显示所需的视图。

答案 1 :(得分:0)

如果每年的内容和逻辑之间没有关联,请使用区域。建立2014年区域,2015年区域等。

Microsoft asp.net网站上有详细记录的区域

答案 2 :(得分:0)

感谢所有帮助。我最终选择"区域"因为它对我个人而言更有意义。每年的内容都是有限的,它让我可以看到我很满意的结构。

为我工作必须在映射过程中取得进展。我没有完全理解它,当我在开发过程中紧迫时,结果有点令人沮丧。

这个网站对我获得的所有信息都非常了解,非常感谢!