使用Html.EditorFor和Html.TextBox传递HTML属性和[DisplayFormat]

时间:2010-10-13 19:55:46

标签: asp.net-mvc asp.net-mvc-2 html-helper

我正在尝试将Html.EditorFor用于需要应用DisplayFormat属性和HTML属性(通常是CSS类)的值。

Html.TextBox忽略DisplayFormat属性,Html.EditorFor不允许我传递Html属性。除了自己编写HTML之外,这里的首选解决方案是什么?

2 个答案:

答案 0 :(得分:3)

这是一种可能性:

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

~/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" }
)%>

并在主视图中:

<%: Html.EditorForModel()

或另一个:

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

并在主视图中:

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

并在你的CSS中:

.foo input {
    /* define some rule here */
}

答案 1 :(得分:0)

我刚才遇到过同样的问题。如果您正在使用编辑器模板,例如日期选择器,你可以简单地做(使用Razor):

@model System.DateTime
@Html.TextBox("", Model.ToString(ViewData.ModelMetadata.DisplayFormatString), new { @class = "date" })

这将使用DisplayFormat属性中的值格式化日期。