10

有没有办法创建一个带有哈希/磅/片段的强类型 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

4 回答 4

9

在 ASP.NET MVC 2.0中添加了新的帮助器,允许您指定片段。例子:

<%= Html.ActionLink("Feed me", "Action", "Controller", null, null, "food", null, null) %>
于 2010-05-27T14:35:35.383 回答
8

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

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

除了 spark viewengine - 它需要 1 个很好的旧 htmlhelper 扩展方法和命名参数。


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

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

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


是的,我非常同意 Mattias Jakobsson 的观点。

于 2010-05-27T14:55:14.230 回答
2

更新:此重载包含在 T4MVC 2.6.56 中

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

如果我们停止支持 Fx 3.5,事情会变得更容易,因为我们可以依赖默认/命名参数,这对减少过载地狱有很大帮助。但到目前为止,我一直在避免这一步,因为并不是每个人都在 4.0 上。

也许我应该将当前版本冻结为与 Fx 3.5/MVC 1.x 兼容的最后一个版本,然后仅在较新的版本中支持 Fx 4.0/MVC 2(同时无限期地保持旧版本)。无论如何,我离题了:)

于 2010-05-29T11:07:14.970 回答
1

David Ebbo 根据我在 StackOverflow上提出的类似问题将此功能添加到 T4MVC。

于 2012-05-09T12:15:31.563 回答