263

How do I add data-* html attributes using TextboxFor?

This is what I currently have:

@Html.TextBoxFor(model => model.Country.CountryName, new { data-url= Url.Action("CountryContains", "Geo") })

As you see, the - is causing a problem here data-url. Whats the way around this?

1

1 Answer 1

443

You could use underscore (_) and the helper is intelligent enough to do the rest:

@Html.TextBoxFor(
    model => model.Country.CountryName, 
    new { data_url = Url.Action("CountryContains", "Geo") }
)

And for those who want to achieve the same in pre ASP.NET MVC 3 versions they could:

<%= Html.TextBoxFor(
    model => model.Country.CountryName, 
    new Dictionary<string, object> { 
        { "data-url", Url.Action("CountryContains", "Geo") } 
    }
) %>
Sign up to request clarification or add additional context in comments.

8 Comments

Is this behaviour specified anywhere :) ?
@Ryan, no it doesn't because it does't make sense to work for EditorFor. The EditorFor helper is used to render a custom HTML template that corresponds to the given type. A template could contain many elements, so talking about attributes in a template doesn't really make sense. Of course you could always write a custom template that works with the additionalViewData parameter that could be passed to an editor template and simply output them as attributes on the corresponding input field.
Just to be clear the resulting markup has an underscore and not hyphen. The sentence "You could use underscore (_) and the helper is intelligent enough to do the rest", specifically the bit about the supposed intelligence made me believe it would auto convert to - but it doesn't. HTML5 supports -.
@AlanMacdonald the _ is converted to - in older (middle?) versions of MVC. It may be that the most recent version(s) have dropped it, but I'm using it successfully on MVC 3 and 4.
@AlanMacdonald (and others reading), the _ is converted to - in MVC 5, too. I'm using it successfully in a project I'm currently working on, which uses MVC 5.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.