Passing HTML Attributes and [DisplayFormat] using Html.EditorFor and Html.TextBox
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 pre开发者_StackOverflow社区ferred solution here?
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 */
}
I came across this same issue just now. If you are using an editor template for e.g. a date picker, you can simply do (using Razor):
@model System.DateTime
@Html.TextBox("", Model.ToString(ViewData.ModelMetadata.DisplayFormatString), new { @class = "date" })
That will format the date using the value from the DisplayFormat attribute.
精彩评论