对不起,如果这是一个总的noob问题,但我想创建特定于“年份”显示内容的控制器。我可以拥有一个使用数字的MVC 4控制器吗?
当我尝试创建“2015Controller”时,它在数字前面插入下划线,随后在视图名称中插入下划线。 (不是友好的网址,我正在寻找。)
也许我是一个完整的涂料,并已错过了这个船,但我想分离内容为基于年份的页面显示,因为我有多个我希望通过简单的网址访问多年的内容。
对不起,如果这是一个总的noob问题,但我想创建特定于“年份”显示内容的控制器。我可以拥有一个使用数字的MVC 4控制器吗?
当我尝试创建“2015Controller”时,它在数字前面插入下划线,随后在视图名称中插入下划线。 (不是友好的网址,我正在寻找。)
也许我是一个完整的涂料,并已错过了这个船,但我想分离内容为基于年份的页面显示,因为我有多个我希望通过简单的网址访问多年的内容。
这听起来像是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/2015
或http://mydomain/2015/Index
,该请求将被发送到Index
2015
的值为year
。如果访问者导航到http://mydomain/2016/Schedule
,那么该请求将被发送到Schedule
动作,其中year
值为2016
。
所以,你应该全部设置。如果您想根据年份来区分视图,则可以添加多个视图,并将所需的值传递给帮助器以显示所需的视图。
如果每年的内容和逻辑之间没有关联,请使用区域。做一个2014区,2015年地区等
地区有据可查的微软asp.net网站
感谢所有帮助。我结束了与“地区”,因为它对我个人更有意义。每年的内容都是有限的,它使我能够看到我感到舒适的事物结构。
对我而言,工作必须在制图过程中取得进展。我没有完全理解它,当我被迫在开发中受到压力时,结果有点令人沮丧。
本网站对于我从中获得的所有信息都非常了解,非常感谢!
您可以将URL的任何部分映射到控制器名称,操作名称或参数名称 - 而不仅限于此特定顺序。所以你可以将你的'/ 2014 /'URL段映射到任何东西,而不仅仅是一个控制器名称(我将映射到一个方法的参数)。你能展示你的网址的例子吗? – GSerg 2014-12-27 20:29:56
你是否期望你的控制器在一年之间变化很大,或者你是否希望能够通过像http:// mydomain/2015/Page这样的URL传递一年? – JLRishe 2014-12-27 20:30:23
由于它是一个社区影院网站,内容因年份而异,因此我希望能够使用mydomain/2015/page过程。 – 2014-12-27 20:34:44