问题
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?
回答1:
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 */
}
回答2:
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.
来源:https://stackoverflow.com/questions/3927488/passing-html-attributes-and-displayformat-using-html-editorfor-and-html-textbo