[英]ASP.NET MVC Routing vs Specific Actions
我对完成事情的方式有些困惑。 我的网站可以向用户显示故事的提要,并且提要可以是多个类别之一。 (例如,您可以查看“所有故事” Feed或“我的提交” Feed)。
在处理路由方面,这样做是否更有意义:
1)让一个动作(主页/索引)通过以下路由处理不同的“ storyCategory”参数:
[Route("~/"), Route("")] //Index will be default route for both SiteRoot and SiteRoot/Home
[Route("{storyCategory?}/{page?}")]
[Route("{storyCategory?}/Page/{page?}")]
public ActionResult Index(Story.Category storyCategory = Story.Category.None, int page = 1)
要么
2)对每个storyCategory都有特定的操作,而不是将枚举作为参数传递:
[Route("~/"), Route("")] //Index will be default route for both SiteRoot and SiteRoot/Home
public ActionResult Index(int page = 1)
public ActionResult ReadLater(int page = 1)
public ActionResult PlanToUse(int page = 1)
如果您的所有供稿彼此完全相同,并且只需执行一些操作且参数始终相同,则第一个选项似乎很明显...
但是,例如,如果将来您希望其中一个提要中具有不同的“ ReadLater”(具有不同的参数),那么您可能会后悔选择了第一个选项。
由于以下原因,我将选择第二种方法:
此外,如果feed的增长超出预期,则可以创建一个常量文件,在其中可以通过以下方式将每个控制器及其动作相关联:
namespace Stories
{
public class ControllersNames {
public const string AllStories = "AllStories";
public const string MySubmissions = "MySubmissions";
}
public class ActionsNames
{
#region AllStories
public const string AllStories_ReadLater = "ReadLater";
public const string AllStories_PlanToUse = "PlanToUse";
#endregion
#region MySubmissions
public const string MySubmissions_ReadLater = "ReadLater";
public const string MySubmissions_PlanToUse = "PlanToUse";
//same action but with different paramaters below
public const string MySubmissions_PlanToReUse = "PlanToUse";
public const string MySubmissions_Store = "Store";
#endregion
}
}
在您认为的某个地方,您可能会拨打类似于以下内容的电话:
<a ... href="@Url.Action(
ActionsNames.MySubmissions_PlanToUse,
ControllersNames.MySubmissions,
new { page = Model.MySubmissions.IDPage })">
阅读和执行更多操作更加容易...
我会选择第一个选项,因为仅出于过滤文章/内容而采取不同的操作几乎没有意义。
在路由中使用枚举似乎也不是理想的选择。 有意义的字符串更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.