2016-01-02 55 views
0

我有簡單的帶DateTime屬性的模型類。使用asp .net scaffolding引導datetimepicker

[Required] 
    [DataType(DataType.DateTime)] 
    public DateTime When { get; set; } 

目前的Visual Studio腳手架產生這樣的:

<div class="form-group"> 
     @Html.LabelFor(model => model.When, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.When, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.When, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

這是一個簡單的文本框。我想覆蓋默認的腳手架。我可以添加一些東西到默認模板,並且我的更改被生成。

如何配置即Create.cs.t4文件來生成引導程序datetimepicker?

有一個,如果檢查條件時,這是一個枚舉

else if (property.IsEnum && !property.IsEnumFlags) 

或布爾型

bool isCheckbox = property.TypeName.Equals(boolType); 

我的解決辦法是增加if語句來檢查它是否是一個datetime和產生我自己輸入字段。我查了網頁,但這不是一個常見的話題。

+0

的可能的複製[自定義EditorTemplate未在MVC4用於DataType.Date](http://stackoverflow.com/questions/13925127/custom-editortemplate-not -mdc4-for-datatype-date) –

+0

它不是重複的自定義編輯器模板。這是一個關於腳手架的單獨問題。它可以通過另一種解決方法來解決(自定義編輯器模板),這不是答案 – Amir

回答

1

如果你想改變腳手架,你需要這樣做:

bool isDateTime = property.TypeName.Equals("System.DateTime"); 

爲了檢查需要檢查的類型名的屬性的數據類型。 TypeName接受數據類型的字符串值,並且需要包含名稱空間。例如System.Int32System.DateTimeSystem.Bool

你可以寫HTML標記或創建自己的HTML幫助和,然後做這樣的事情:

<# if (isDateTime) {#> 
     @Html.CutomeDateHelperFor(modelItem => <#= "item." + GetValueExpression(property) #>) 
<# } #> 

旁邊的腳手架,另一個更簡單的方法是使用編輯器模板。您將爲DateTime類型創建編輯器模板,所有editorfor標籤將被轉換爲您的自定義html標籤,其中包括Booststap日期和時間選擇器或其他任何類似jquery ui日曆的東西。

見這一個作爲一個例子: https://www.simple-talk.com/dotnet/asp.net/extending-editor-templates-for-asp.net-mvc/