2011-09-11 4 views
0

MVC에서 다음과 같은 사용자 지정보기 컨트롤이 있습니다. 그러나, 그것은 전혀 작동하지 않습니다.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

편집기 템플릿으로 자동으로 사용하려면 [부분보기를 등록하거나 알려진 위치에 있지 않아야합니다] (http://blogs.msdn.com/b/nunos) /archive/2010/02/08/quick-tips-about-asp-net-mvc-editor-templates.aspx)? – bzlm

답변

2

내가 올바르게 EditorTemplates 폴더에 템플릿을 배치하고 있으리라 믿고있어, 당신은 올바른 유형 (즉, DateTime.aspx)

당신이 nullable 형식을 사용하고 Beause 후 이름을 지정하고 있음 , 수동으로 템플리트 이름을 지정해야합니다.

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

또는 모델 메타 데이터를 검사하여 유형이 Null을 허용하는지 확인할 수 있습니다.

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