开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜