2014-12-27 59 views
3

对不起,如果这是一个总的noob问题,但我想创建特定于“年份”显示内容的控制器。我可以拥有一个使用数字的MVC 4控制器吗?

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

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

+0

您可以将URL的任何部分映射到控制器名称,操作名称或参数名称 - 而不仅限于此特定顺序。所以你可以将你的'/ 2014 /'URL段映射到任何东西,而不仅仅是一个控制器名称(我将映射到一个方法的参数)。你能展示你的网址的例子吗? – GSerg 2014-12-27 20:29:56

+2

你是否期望你的控制器在一年之间变化很大,或者你是否希望能够通过像http:// mydomain/2015/Page这样的URL传递一年? – JLRishe 2014-12-27 20:30:23

+0

由于它是一个社区影院网站,内容因年份而异,因此我希望能够使用mydomain/2015/page过程。 – 2014-12-27 20:34:44

回答

3

这听起来像是XY Problem

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

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

下面介绍如何完成“通过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,该请求将被发送到Index2015的值为year。如果访问者导航到http://mydomain/2016/Schedule,那么该请求将被发送到Schedule动作,其中year值为2016

所以,你应该全部设置。如果您想根据年份来区分视图,则可以添加多个视图,并将所需的值传递给帮助器以显示所需的视图。

0

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

地区有据可查的微软asp.net网站

0

感谢所有帮助。我结束了与“地区”,因为它对我个人更有意义。每年的内容都是有限的,它使我能够看到我感到舒适的事物结构。

对我而言,工作必须在制图过程中取得进展。我没有完全理解它,当我被迫在开发中受到压力时,结果有点令人沮丧。

本网站对于我从中获得的所有信息都非常了解,非常感谢!