【问题标题】:How to remove default date in mvc4 textbox?如何删除 mvc4 文本框中的默认日期?
【发布时间】:2020-05-28 19:08:07
【问题描述】:

我在 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 显示在文本框中时,我遇到了问题。其实我想显示占位符值。

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

【问题讨论】:

  • 让你的属性可以为空 - public DateTime? dateofAction { get; set; }(并且不要设置value属性!)
  • 谢谢斯蒂芬。像魅力一样工作
  • 并删除您的$(document).on('focus', '.calender', function(){ 并仅将其替换为$('#dateofAction').datapicker({ ... }); 并删除new { @id = "dateofAction" }(它已经拥有id
  • @StephenMuecke 如果用户不使用可为空的日期时间怎么办?如果我们使用 value 属性,那么它会影响其他任何东西吗?
  • 谢谢斯蒂芬。我删除并进行了更改。非常感谢。请问可以回答吗

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

为了使用占位符显示一个空文本框,您需要使您的属性可以为空。如果还想选择日期,也可以使用[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]" })

你的 datepicker 插件应该在 DOM 被渲染时初始化,而不是每次都被初始化

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

【讨论】:

  • 是的,这就是我需要的。非常感谢
【解决方案2】:

DateTime 是结构和值。当您通过模型查看“dateofAction”时具有默认值。这个挑战的两种方式:

  1. 将 dateofAction 设为可为空。
  2. 在创建模型时将 dateofAction 设置为 DateTime.Now。

【讨论】:

    【解决方案3】:

    解决这个问题的两种方法。

    1. 通过添加“?”设置实体 Nullable在实体的数据类型旁边 喜欢public DateTime? dateofAction { get; set; }

    2. 如果您不想让实体为 Nullable,您可以在视图“view.cshtml”中添加此代码

    var variableName = 
        Model.Value.ToString("d") == default(DateTime).ToString("d") ? "" :
        Model.Value.ToString("d");
    

    在这种情况下 Model.Value.ToString("d");替换为 Model.dateofAction.ToString("d");

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

    在 ToString("d") 中,"d" 是字符串格式化程序 了解更多关于字符串格式化here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-17
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      相关资源
      最近更新 更多