Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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# 如何删除mvc4文本框中的默认日期?_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 如何删除mvc4文本框中的默认日期?

C# 如何删除mvc4文本框中的默认日期?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我在mvc4应用程序中有一个文本框,如下所示 @Html.TextBoxFor(x=>x.dateofAction, ViewBag.filterdateTime as string, new { @id = "dateofAction", @placeholder = "Date Of Action", @class = "txtBox form-control calender validate[required]" }) 我正在为这个文本框使用jquery日历 $(docume

我在mvc4应用程序中有一个文本框,如下所示

@Html.TextBoxFor(x=>x.dateofAction, ViewBag.filterdateTime as string,  new { @id = "dateofAction", @placeholder = "Date Of Action", @class = "txtBox form-control calender validate[required]" })
我正在为这个文本框使用jquery日历

 $(document).on('focus', '.calender', function(){
         $(this).datepicker({

             dateFormat: "dd/mm/yy",
             changeMonth: true,
             changeYear: true,
             showOn: 'button',
             buttonImage: '/images/icondate.png',
             buttonImageOnly: true
        })
            });
这是我的模型

 [DisplayName("dateofAction")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
        public DateTime dateofAction { get; set; }
当第一次页面加载默认日期
1/1/0001 12:00:00 am
显示在文本框中时,我面临问题。实际上我想显示占位符值


我可以知道为什么无法获取占位符值吗?

日期时间是struct和value。当您将模型传递给视图时,“dateofAction”具有默认值。应对这一挑战的两个途径:

  • 使dateofAction为空
  • 将dateofAction设置为DateTime。现在创建模型时

  • 为了显示带有占位符的空文本框,需要将属性设置为空。如果还希望选择日期,则还可以使用
    [Required]
    属性装饰属性

    还请注意,
    [DisplayFormat]
    是不必要的,并且由
    TextBoxFor()
    方法忽略。您还应该使用
    [Display]
    属性,而不是
    [DisplayName]
    您的属性应该是

    [Display(Name= "Date of Action")]
    [Required(ErrorMessage = "Please select a date")]
    public DateTime? dateofAction { get; set; }
    
    那么在视图中,您的代码应该是

    @Html.TextBoxFor(x=>x.dateofAction, new { @placeholder = "Date Of Action", @class = "txtBox form-control calender validate[required]" })
    
    并且应该在呈现DOM时初始化datepicker插件,而不是每次它被聚焦时

    $('#dateofAction').datepicker({
        dateFormat: "dd/mm/yy",
        ....
    })
    

    解决这个问题有两种方法

  • 通过在实体的数据类型旁边添加“?”将实体设置为空 比如
    公共日期时间?dateofAction{get;set;}

  • 如果不想使实体为空,可以在视图“view.cshtml”中添加此代码

  • 在本例中,Model.Value.ToString(“d”);替换为Model.dateofAction.ToString(“d”)

    使用“variableName”作为输入字段中的值

    在ToString(“d”)中,“d”是字符串格式化程序
    了解有关字符串格式设置的详细信息

    使属性可为null-
    公共日期时间?dateofAction{get;set;}
    (不要设置
    属性!)谢谢stephen。其工作原理类似于charmAnd删除
    $(文档)。在('focus','.calender',function(){
    上,将其替换为
    $('dateofAction')。datapicker({…});
    并删除
    新的{@id=“dateofAction”}
    (它已经有了
    id
    )@StephenMuecke如果用户不习惯使用可空日期时间怎么办?如果我们使用value属性,那么它会影响到其他任何东西吗?谢谢stephen。我删除并进行了更改。非常感谢。你能把答案放在这里吗?这是我需要的。非常感谢
    var variableName = 
        Model.Value.ToString("d") == default(DateTime).ToString("d") ? "" :
        Model.Value.ToString("d");