Пользовательский контроль вида для MVC не работает? - PullRequest
0 голосов
/ 11 сентября 2011

У меня есть следующий пользовательский элемент управления в 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 Ответ

2 голосов
/ 11 сентября 2011

Я предполагаю, что вы правильно размещаете свой шаблон в папке EditorTemplates и что вы называете его после правильного типа (например, DateTime.aspx)

Поскольку вы используете обнуляемыйtype, вам нужно указать имя шаблона вручную.

<%: 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" }) %>   
<% } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...