2011-09-11 6 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" }) %> 

そして、私からそれを使用する場所これは、どのように次の場合ではしかし、単純なテキストフィールドだけで、現れ

[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() 
    { 

    } 
} 

:モデルは次のようになります

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

現実には、タイプがDateTimeであるため、ビューのユーザーコントロールが表示されることを期待しています。

これを解決する方法の提案はありますか?

+0

エディタテンプレートとして自動的に使用するには[部分的なビューを登録する必要はありません]または[既知の場所など](http://blogs.msdn.com/b/nunos /archive/2010/02/08/quick-tips-about-asp-net-mvc-editor-templates.aspx)? – bzlm

答えて

2

あなたがNULL可能タイプを使用しているBeause

を私はあなたが正しくEditorTemplatesフォルダにテンプレートを配置していることを仮定している、とあなたは正しいタイプ(すなわちDateTime.aspx)の後に名前を付けていることテンプレート名を手動で指定する必要があります。

<%: 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" }) %> 
<% } %> 
関連する問題