我在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。
有关如何解决此问题的任何建议?
答案 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" }) %>
<% } %>