ChatGPT解决这个技术问题 Extra ChatGPT

Html5 data-* with asp.net mvc TextboxFor html attributes

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?


D
Darin Dimitrov

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") } 
    }
) %>

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.