【问题标题】:Best practices for building links in MVC在 MVC 中构建链接的最佳实践
【发布时间】:2010-08-06 21:24:29
【问题描述】:

如果我不想在我的视图标记中这样做,

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

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

【问题讨论】:

    标签: asp.net-mvc-2 asp.net-mvc-routing


    【解决方案1】:

    比起 MVC Futures ActionLink 助手,我更喜欢使用 T4MVC。你的行看起来像这样:

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

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

    【讨论】:

    • 我不确定这是否是一个有效的问题:D 但是,T4MVC 是否支持非 MVC 标准的项目结构?我的 Views 和 Partial Views 文件夹位于与 MVC 2 项目中的默认位置不同的位置。我有一个自定义视图引擎,可以根据各种业务规则选择正确的视图。
    • @Praven - 是的,模板中有一个设置文件,您可以在其中设置视图和控制器的目录。如果只是设置目录名称更复杂,则必须修改 t4 模板本身。
    • 优秀。我现在正在玩它。爱到现在。谢谢!
    • 这对我来说效果很好。我调整了设置文件以将其指向我的自定义视图和控制器文件夹。我必须如下所示设置 ControllersFolder 属性才能使其工作。 @"AppCode\Controllers" 我希望 David 添加到 T4 的另一件事是用于指定 PartialViews 的自定义文件夹。现在,我认为它在主 Views 文件夹中。
    【解决方案2】:

    从长远来看,我认为您在 MVC Futures 库中看到的 Html.ActionLink 是可行的方法:

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

    使用您的 HtmlHelpers,即使它们只是围绕当前基于魔术字符串的功能的包装器,因为它至少可以减少您对魔术字符串的影响并提供单点更改。

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

    【讨论】:

    • 这太棒了。我想我现在明白了。我计划使用 ViewModel 的原因之一是可测试性。有关如何测试这些链接的任何想法?
    • Futures 库中的 ActionLink 方法存在一些严重的性能问题。来源:chadmoran.com/blog/2009/4/23/…
    • 这些测试已经有一年多了,在旧版本的 MVC 和旧版本的框架上运行。所以我会问他们是否仍然准确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多