代码之家  ›  专栏  ›  技术社区  ›  Dan Atkinson

使用url片段创建t4mvc actionlink

  •  10
  • Dan Atkinson  · 技术社区  · 15 年前

    有没有一种方法可以用哈希/磅/片段创建一个强类型的t4mvc actionlink?

    例如,下面是我要创建的链接:

    <a href="/Home/Index#food">Feed me</a>
    

    但是对于t4mvc对象没有可以这样做的扩展。

    <%= Html.ActionLink("Feed me", T4MVC.Home.Index()) %>
    

    所以,我最终要做的是创建一个操作,然后以这种方式嵌入它:

    <a href="<%= Url.Action(T4MVC.Home.Index()) %>"#food>Feed me</a>
    

    这不是很理想。有人有什么想法/建议吗?

    提前谢谢

    4 回复  |  直到 12 年前
        1
  •  8
  •   Arnis Lapsa    15 年前

    这种方法是我能想到的唯一一种感觉(对我来说)比手动编写锚稍微好一点的方法:

    ${Html.ActionLink("Feed me", T4MVC.Home.Index(), Fragment: "food")}
    

    除了Spark ViewEngine,它还需要1个好的旧HTMLHelper扩展方法和命名参数。


    我假设这在默认的视图引擎中不可用?我决定为actionlink编写一个快速扩展,但它并不优雅,我希望在未来的t4mvc版本中有任何解决方案可供其他人使用。

    Spark将<%=%>替换为$。只是因为我更喜欢它(如果强调代码的优雅,您应该尝试一下)。使用命名参数需要C 4.0。

    这是因为我想避免丢失关于“食物”参数映射的信息。


    是的,我非常同意马提亚斯·雅各布森的观点。

        2
  •  9
  •   Darin Dimitrov    15 年前

    在ASP.NET MVC 2.0中 new helpers have been added that allow you to specify the fragment . 例子:

    <%= Html.ActionLink("Feed me", "Action", "Controller", null, null, "food", null, null) %>
    
        3
  •  2
  •   Paul Tyng    12 年前

    更新 :此过载包含在T4MVC 2.6.56中。

    是的,为了完整性,我们可能应该将其添加到T4MVC中。这应该很容易做到,但如果我们开始添加协议/主机名,最终会出现很多过载。

    如果我们停止支持fx 3.5,事情会更简单,因为我们可以依赖默认/命名参数,这有助于减少超负荷地狱。但到目前为止,我一直在回避这一步,因为并不是所有人都在4.0上。

    也许我应该将当前版本冻结为最后一个兼容fx 3.5/mvc 1.x的版本,然后在新版本中仅支持fx 4.0/mvc 2(同时无限期地保持旧版本)。不管怎么说,我要离题了:)

        4
  •  1
  •   Community Mohan Dere    8 年前

    David Ebbo根据 similar question 我在StackOverflow上做的。