views:

191

answers:

3

Is there a way to create a strongly typed T4MVC ActionLink with a hash in it?

For example, here is the link I'd like to create:

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

But there's no extension to the T4MVC object that can do this.

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

So, what I end up having to do is create an action, and then embed it that way:

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

This isn't very desirable. Anyone have any ideas/suggestions?

Thanks in advance

+1  A: 

In ASP.NET MVC 2.0 new helpers have been added that allow you to specify the fragment. Example:

<%= Html.ActionLink("Feed me", "Action", "Controller", null, null, "food", null, null) %>
Darin Dimitrov
This was already available in MVC v1, but not with the T4MVC additions. My main reason for having T4MVC was to get away from the magic strings that are present in your example.
Dan Atkinson
+1  A: 

This kind of approach is the only one i can think of that feels (to me) slightly better than writing anchor manually:

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

Apart from spark viewengine - it costs 1 good old htmlhelper extension method & named parameters.


I assume that this isn't available in the default viewengine? I've decided to write a quick extension for the ActionLink, but it's not elegant, and I would have liked any solution to be available to others in future versions of T4MVC.

Spark replaces <%=%> with ${}. Mentioned just because I prefer it (You should try it if You emphasize code elegance). C# 4.0 is required in order to use named parameters.

That's because I would like to avoid losing information to which parameter "food" argument maps.


And yeah, i strongly agree with Mattias Jakobsson.

Arnis L.
I assume that this isn't available in the default viewengine? I've decided to write a quick extension for the ActionLink, but it's not elegant, and I would have liked any solution to be available to others in future versions of T4MVC.
Dan Atkinson
+1  A: 

Yes, for completeness we should probably add this to T4MVC. It should be easy to do, except we'll end up with a lot of overload if we start adding protocol/hostname as well.

Things would be easier if we stopped supporting Fx 3.5, because we could rely on default/named params, which help a lot with reducing overload hell. But I've been avoiding that step so far because not everyone is on 4.0 yet.

Maybe I should freeze the current version as the last Fx 3.5/MVC 1.x compatible, and then only support Fx 4.0/MVC 2 in newer builds (while keeping the old one up indefinitely). Anyway, I'm digressing :)

David Ebbo
Hi David. Thanks for the answer. Yes, I think that freezing it for .NET 3.5 will definitely help in encouraging people to move to .NET 4/MVC 2. Certainly, it'll make it easier with named params.
Dan Atkinson