开发者

Passing HTML Attributes and [DisplayFormat] using Html.EditorFor and Html.TextBox

开发者 https://www.devze.com 2023-01-19 17:58 出处:网络
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.

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

精彩评论

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