views:

107

answers:

1

I am trying to use Html.EditorFor for a value where I need both a DisplayFormat attribute and an HTML attribute (specfically a CSS class) to be applied.

Html.TextBox ignores the DisplayFormat attribute, and Html.EditorFor will not let me pass Html attributes. Other than writing the HTML myself, what is the preferred solution here?

+2  A: 

Here's one possibility:

public class MyModel
{
    [UIHint("MyDateTemplate")]
    public DateTime Value { get; set; }
}

and in ~/Views/Home/EditorTemplates/MyDateTemplate.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime>" %>
<%: Html.TextBox(
    string.Empty, 
    Model.ToString("dd/MM/yyyy"), 
    new { @class = "foo" }
)%>

and in the main view:

<%: Html.EditorForModel()

or yet another one:

public class MyModel
{
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime Value { get; set; }
}

and in your main view:

<div class="foo">
    <%: Html.EditorFor(x => x.Value) %>
</div>

and in your css:

.foo input {
    /* define some rule here */
}
Darin Dimitrov
Hmm, it seems odd to be required to implement a control in order to pass HTML attributes, I don't do this anywhere else in my app.
RedFilter