MVC.net应用程序中的不同日期和日期时间

时间:2017-10-18 13:38:40

标签: c# asp.net-mvc datetime

我想将Date区分为DateTime,如:

public class ViewModel {
    public Date Date { get; set; }
    public DateTime DateTime { get; set; }
}

在我看来,我想称之为:

@Html.EditorFor(p => Model.Date)
@Html.EditorFor(p => Model.DateTime)

渲染:

<input data-val="true" data-rule-date="true" data-val-date="Must be a date." type="date" value="" aria-describedby="field-error"/>
<input data-val="true" data-rule-datetime="true" data-val-date="Must be a datetime." type="datetime" value="" aria-describedby="field-error"/>

我想要这样做的原因是,有2个不同的插件初始化和验证方法,使用datepicker和jquery验证插件,如:

<script type="text/javascript">
    $.validator.addMethod("date", function(value, element) { [date validation code] });
    $("[type='date']").datepicker({ format:"dd/MM/yyyy" });

    $.validator.addMethod("datetime", function(value, element) { [time validation code] });
    $("[type='datetime']").datetimepicker({ format:"dd/MM/yyyy HH:mm:ss" });
</script>

我的问题是:我是否有义务宣布一个新的结构Date和他的Html.EditorFor实现,或者有一种更简单的方法?

2 个答案:

答案 0 :(得分:1)

您可以使用ViewModel中的[UIHint]属性重定向到EditorTemplate。不需要Date结构。

public class ViewModel {
    [UIHint("Date")]
    public DateTime Date { get; set; }
    public DateTime DateTime { get; set; }
}

通过此声明,@Html.EditorFor(m => m.Date)将查找名为Date.cshtml的EditorTemplate,并将DateTime作为模型传递给此编辑器。

有关详情,请参阅:UIHint, DisplayTemplates, and EditorTemplates in MVC

答案 1 :(得分:1)

通过在模型中的字段上方使用DBNull,您可以更改使用HTMLHelper呈现时表示的类型

System.ComponentModel.DataAnnotations