2010-08-06 76 views
2

建立联系,如果我不想做这在我看来标记,最佳做法在MVC

<%=Html.RouteLink("Listings", "Listings", new {market = "Austin", state = "Texas", pagenumber = 3 })%>

这将是创建在MVC 2链接的最佳方法?我有一个HTML助手来构建自定义链接,但它所做的只是充当RouteLink(或ActionLink)的包装器。我想要更优雅的东西,并且有一个更短的语法。如果我在控制器中建立链接,我如何将它推入视图?通过ViewData? (希望不是)。或者它会成为ViewModel的一部分?

回答

2

我喜欢使用T4MVC比MVC期货ActionLink帮手更好。你行应该是这样的:

<%:Html.ActionLink("Listings", MVC.Listings.Index("Austing", "Texas", 3)) %> 

http://mvccontrib.codeplex.com/wikipage?title=T4MVC

+0

我不确定这是否是一个有效的问题:D但是,T4MVC是否支持非MVC标准的项目结构?我的视图和部分视图文件夹位于与MVC 2项目中默认位置不同的位置。我有一个自定义视图引擎,根据各种业务规则选择正确的视图。 – Praveen 2010-08-06 23:57:31

+1

@Praven - 是的,您可以使用模板获取设置文件,您可以在其中为视图和控制器设置目录。如果它更复杂,那么只需设置目录名称,就必须自己修改t4模板。 – Necros 2010-08-07 00:06:39

+0

优秀。我现在在玩它。爱它到目前为止。谢谢! – Praveen 2010-08-07 00:09:44

2

长期来看,我认为你的MVC期货库看到Html.ActionLink是飞行的方式:

<%= Html.ActionLink<ListingsController>(x => x.Listings("Austin", "Texas", 3)) %> 

使用您HtmlHelpers,即使他们只是围绕当前魔法串包装因为它至少可以将您的正面缩小为魔术字符串,并提供了单点修改。

如果我可以帮助它制作语法糖,我不会参与构建后端链接。

+0

这是真棒。我想我现在正在接受这个漂移。我计划使用ViewModel的原因之一就是可测试性。关于如何测试这些链接的任何想法? – Praveen 2010-08-06 21:42:53

+0

Futures库中的ActionLink方法有一些严重的性能问题。 来源:http://www.chadmoran.com/blog/2009/4/23/optimizing-url-generation-in-aspnet-mvc-part-2.html – Praveen 2010-08-10 19:32:05

+0

那些测试已经超过一年了,正在运行MVC的旧版本和The Framework的旧版本。所以我会问他们是否仍然准确。 – 2010-08-11 00:30:33