Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将MVC默认日期(01/01/0001)的格式设置为空_C#_Asp.net Mvc_Date_Datetime_Razor - Fatal编程技术网

C# 将MVC默认日期(01/01/0001)的格式设置为空

C# 将MVC默认日期(01/01/0001)的格式设置为空,c#,asp.net-mvc,date,datetime,razor,C#,Asp.net Mvc,Date,Datetime,Razor,我的剃须刀表单代码 <div class="form-group"> @Html.LabelFor(model => model.achPayDate, htmlAttributes: new { @class = "control-label col-md-7" }) @Html.DisplayFor(model => model.achPayDate, new {@class="date"}) </div> 当achPayDate=000

我的剃须刀表单代码

<div class="form-group">
    @Html.LabelFor(model => model.achPayDate, htmlAttributes: new { @class = "control-label col-md-7" })
    @Html.DisplayFor(model => model.achPayDate, new {@class="date"})
</div>

当achPayDate=0001-01-01T00:00:00时,显示01/01/0001,我想将日期抑制为空。如何才能做到这一点???

对于普通日期时间,如果您根本不初始化它们,那么它们将匹配DateTime.MinValue,因为它是一种值类型而不是引用类型

您还可以使用可为空的DateTime,如下所示:

DateTime? MyNullableDate;
或更长的形式:

Nullable<DateTime> MyNullableDate;

您可以执行以下操作

  • 在MVC项目=>Views=>Shared中,创建新文件夹
    DisplayTemplates
  • DisplayTemplates
    文件夹下创建新视图,并将其命名为
    Date.cshtml
  • Date.cshtml的代码

    @model DateTime?
    @if(Model!=null && Model!=DateTime.MinValue)
    {
       @string.Format("{0:MM/dd/yyyy}",Model)
    }
    
    [DataType(DataType.Date)]
    public DateTime? achPayDate { get; set; }
    
    您的型号的代码

    @model DateTime?
    @if(Model!=null && Model!=DateTime.MinValue)
    {
       @string.Format("{0:MM/dd/yyyy}",Model)
    }
    
    [DataType(DataType.Date)]
    public DateTime? achPayDate { get; set; }
    
    这种方式将使所有带有数据注释的DateTime
    [DataType(DataType.Date)]
    遵循相同的行为,您也可以对
    编辑器模板执行相同的操作

    您可以获得有关
    EditorTemplates
    DisplayTemplates


    希望这将帮助您

    我在web网格专栏中添加了如下内容

    grid.Column("Note Date",
    style: "width:159px",
    format: @<text>
    @if (item.NoteDate == DateTime.MinValue)
    {
                        
    }
    else
    {
      @string.Format("{0:MM/dd/yyyy}", item.NoteDate)
    }
    </text>)
    
    grid.Column(“注释日期”,
    样式:“宽度:159px”,
    格式:@
    @if(item.NoteDate==DateTime.MinValue)
    {
    }
    其他的
    {
    @string.Format(“{0:MM/dd/yyyy}”,item.NoteDate)
    }
    )
    
    Make value
    null
    OP的属性已经为空:)(并且您不能绑定字段-它们必须是属性)我让Web服务返回DateTime.MinValue,我只想将01/01/0001日期取消为空。我可以在剃须刀上添加代码吗?谢谢您的方法也会返回日期1/1/0001--FYI。@用户6815384,只要检查控制器中的值并将其设置为
    null
    ,如果它等于
    DateTime。MinValue
    [DataType(DataType.Date)]
    与模板无关(它用于在使用
    @Html.EditorFor(m=>m.achPayDate)时生成
    type=“Date”
    在我的回答中,我重点讨论了
    显示模板
    ,并且我提到他可以应用
    编辑模板
    数据类型.日期
    将自动使用
    显示模板
    “Date.cshtml”如果它存在于
    DisplayTemplates
    文件夹中,只要用户没有分配
    UIHint(“…”
    数据类型,日期将不会自动使用模板。它与模板无关。选择模板是因为模板的名称与模型匹配(例如
    DateTime.cshtml
    )或者由于
    [UIHint]
    属性。
    [DataType(DataType.Date)]
    的唯一目的是在定义了两个显示模板(Date.cshtml和datetime.cshtml)的情况下,使用
    EditorFor()
    和标准内置模板来呈现
    type=“Date”
    如果您使用了
    DataType.Date
    ,那么代码
    @Html.DisplayFor(m=>m.achPayDate)
    的视图会发生什么情况?
    DataType.Date
    与此无关。必须承认,我还没有测试过,如果您在同一文件夹中有两个显示模板,并且具有相同的
    @model
    ,则稍后将进行测试:)