我有点困惑,当我应该制作一个新的控制器时,似乎每次我制作一个按钮,我需要制作一个新的控制器来获得正确的路径名称。
例如,在这种情况下,我有一个signIn控制器。
这个控制器会有
1. Login view
2. RestPassword view
3. CreateAccount view
因此,如果他们点击登录,他们会转到其他控制器(我们称之为AccountController),这样就会有所有的帐户视图和内容。
现在RestPassword视图怎么样?当它取决于用户密码时,我希望它转到一个显示它成功的页面(大多数网站似乎都是这样做的,例如asp.net网站,如果你输入一个电子邮件地址,它将转到另一个页面并告诉它您已经发送了新密码。
那么现在应该是另一种观点呢?控制器?
如果是视图,则路径看起来像
http://www.site.com/signIn/EmailForgottenPassword
对我来说什么样的看起来很奇怪。
如果我制作一个新的控制器,那么我可以
http://www.site.com/EmailForgottenPassword
对我来说看起来不错,但是这个控制器只有一个视图。
另一个例子是在这个sigIn页面上,他们是一个Create Account按钮。现在,当点击时,这将转到另一个具有不同帐户列表的页面。
这还应该是一个新的控制器吗?当这些新帐户列在这个新页面上时,它们都会链接到注册控制器,其中包含许多视图。
所以它就像SignController -> RegistrationController -> RegistrationController.
这可能会得到一些不错的链接。
所以就像我说的那样,似乎要获得有意义的好链接,你需要在控制器之后不断创建新的控制器。
所以我必须遗漏一些东西。
答案 0 :(得分:4)
事实上,你实际上并不是需要多个控制器。单独的控制器只是分离您的顾虑的方法。换句话说,OO设计范例促使我们在逻辑上将我们的代码划分为模块,但是你没有拥有 - 一切都可以在一个控制器中。
需要的是针对您要处理的每种不同类型的请求的单独的控制器操作。也就是说,您需要一个暴露给路由表的控制器方法,可以通过键入一些URL和/或提供一些GET或POST数据来调用它。然后,此方法决定向用户显示的内容(视图)。
此外,您可以通过修改Globals.asax中的路由表,将任何 URL指向任何控制器或控制器操作。
您可能对我的答案有更具体的问题 - 请发布它们,我会在其中进行编辑。
答案 1 :(得分:2)
在您的具体情况下,您只需一个控制器即可。我将它命名为AccountController并向其添加以下操作。
然后对于您想要确认屏幕的人,您可以使用Post Redirect Get (PRG) pattern。
关于命名。通常,您希望对控制器使用名词,对这些控制器使用动词。这样你就可以得到很好的可读URL。对于名词,您可以选择控制器处理的逻辑/业务术语(比技术术语更好)。账户,客户,产品,博客等...
答案 2 :(得分:0)
如果您遵循SOLID原则,那么您应该非常具体地命名它们。如果您正在使用ASP.NET MVC 2,那么我会将主要小部件放入“区域”,然后为控制器提供良好的名称。让您的网址快乐!