只需阅读post about MVC best practices即可。该帖子的几个部分描述了构建辅助方法以链接到控制器上的操作。这是一个片段:
1)创建UrlHelper的扩展方法以生成您的网址 路线
避免传递控制器,动作 或者将名称路由为字符串,创建 UrlHelper的扩展方法 封装它,例如:
public static class UrlHelperExtension { public static string Home(this UrlHelper helper) { return helper.Content("~/"); } public static string SignUp(this UrlHelper helper) { return helper.RouteUrl("Signup"); } }
我可以看到这会如何缩短视图中使用的链接......但我不知道这是一个“最佳实践”。也许我只是忽略了一些东西。我应该这样做来建立我的链接?这有什么好处,我只是没有看到?
他甚至接着说应该制作样式表,图片和javascript助手......
答案 0 :(得分:3)
除非在多个地方引用路线,否则我可能不会这样做。我可以看到这样做的价值,我已经实现了HtmlHelper扩展,用于添加样式表和javascript包含添加使用“版本化”链接的功能,但我的常用链接作为ActionLinks包含在UserControl(菜单)中,对于大多数其他我使用ActionLink或BeginForm / AjaxForm来引用该操作。在某些方面,感觉就像为所有人创建新方法,但最常用的链接是增加复杂性以获得非常小的价值 - 您可以通过一些简单的UI手动测试获得的价值,这是您必须要做的反正。
答案 1 :(得分:2)
如果在将URL写为字符串时出错,则在运行时才会捕获它。这样,尝试引用尚未创建为扩展方法的路由将在编译时创建错误,您可以快速更正(如果使用Visual Studio,则更早)。如果您在制定路线时发现错误,则只需将其固定在一个地方。
虽然使用扩展方法不会使UrlHelpers混乱,但最好还是使用名为CommonUrls的静态类来保存静态只读属性(如果您愿意,还可以使用静态方法)。
编辑:我刚才意识到您需要将UrlHelper的实例传递给CommonUrls类。傻我。在这种情况下,扩展方法可能是工作的正确工具。答案 2 :(得分:2)
这是一个人对最佳实践的看法。有几种情况可能会很好。如果您有人在处理URL结构时处理视图,则在完成URL后,您不必更新视图。
答案 3 :(得分:2)
如果其他人碰巧偶然发现这篇旧帖子,我建议使用David Ebbo的T4MVC模板:见his latest blog post here。
答案 4 :(得分:1)
我不认为这是最佳做法。首先,你要沿着一堆扩展方法埋下结构细节的道路。 (虽然你可以使用资源作为路径,但这意味着高摩擦力的变化。)
此外,你什么时候停止?对于任何复杂的网站,您将需要很多这些帮助者。
在引用样式表,javascript,favicons等时,我使用了一种类似的方法,虽然我使用HtmlHelper而不是UrlHelper扩展,但从概念上讲,我认为它们更适合于任务。
此外,由于此类内容通常仅添加到母版页中,因此只需将完整路径传递给帮助程序并使其构建整个标记即可,而不仅仅是解析URI。
答案 5 :(得分:1)
我正在使用这个approch。 当您的应用程序站点地图可能发生变化时,它非常有用。 是的,你需要很多(我的扩展类计数1800行,带注释)
主要区别,就我而言,我使用强类型构建器构建URL。它看起来像这样:
/// <summary>
/// To campaign 'transfer credits' page
/// </summary>
public static string ToCampaignTransferCredits(this UrlHelper helper, int? idCampaignSource)
{
return To<CampaignController>(helper, c => c.Transfer(idCampaignSource));
}
我认为这是一个非常好的做法(恕我直言),原因有以下几点: