MVC的自定义视图控件不起作用?

时间:2011-09-11 15:59:54

标签: asp.net-mvc asp.net-mvc-3 razor

我在MVC中有以下自定义视图控件。但是,它根本不起作用。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" %>
<%=Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "timePicker" }) %>

这就是我使用它的方式,以及如何:

    <div class="editor-field">
        @Html.EditorFor(model => model.StartTime)
        @Html.ValidationMessageFor(model => model.StartTime)
    </div>

该模型如下所示:

[Bind()]
[Table("DailyReports", Schema = "Actives")]
public class DailyReport
{

    [Key()]
    [Display(AutoGenerateField = false, AutoGenerateFilter = false)]
    public int ID { get; set; }

    [DisplayName("Starttidspunkt")]
    public DateTime? StartTime { get; set; }

    [DisplayName("Sluttidspunkt")]
    public DateTime? EndTime { get; set; }

    [DisplayName("Time-rapporter")]
    public virtual ICollection<HourlyReport> HourlyReports { get; set; }

    public DailyReport()
    {

    }
}

然而,一个简单的文本字段只显示,实际上,我希望视图用户控件显示,因为类型是DateTime。

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:2)

我假设你正确地将你的模板放在EditorTemplates文件夹中,并且你在正确的类型之后命名它(即DateTime.aspx)

由于您使用的是可空类型,您需要手动指定模板名称。

<%: Html.EditorFor(model => model.StartTime, "NullableDateTimeTemplate" )%>

或者,您可以检查模型元数据以确定类型是否可为空。

<% if (ViewData.ModelMetadata.IsNullableValueType) { %>
    <%= Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), 
        new { @class = "timePicker" }) %>   
<% } else { %>
    <%= Html.TextBox("", Model.ToShortDateString(), new { @class = "timePicker" }) %>   
<% } %>