【问题标题】:asp mvc EditorFor DateTime not displayingasp mvc EditorFor DateTime 不显示
【发布时间】:2013-05-30 18:27:40
【问题描述】:

我正在尝试在我的 razor 文件中显示从数据库中检索到的日期时间字段,其中包含以下内容:

 @Html.EditorFor(model => model.RequestDate);

我 100% 确定 RequestDate 不为空,因为我检查了视图中传递的模型,它是数据库中的日期。但是,日期时间文本框仍显示“mm/dd/yyyy”。我不知道为什么它不显示日期。有任何想法吗?谢谢。

这是我的模型:

      [Display(Name = "Time")]
    [DataType(DataType.Date)]
    public DateTime RequestDate { get; set; }

编辑:

   [HttpGet]
    public ActionResult DispatchResponseIndex()
    {
        DispatchResponseModel model = new DispatchResponseModel();       


        //if the users session id isnt null then we know they have data related to this form
        object UserID = Session["TestID"];
        if (UserID == null)
        {
            return View(model); //default view               
        }
        else
        {
            UserID = Session["TestID"];
        }

        LoadDB(model, (Guid)UserID);
     //looking at the model here the RequestDate has a valid date of  //{5/24/2013 12:00:00 AM}

        return View(model); 
    }

编辑 2:

如果我使用 @Html.TextBox("asdasd",Model.RequestDate);然后它将以字符串格式显示保存的日期,但我需要为文本框使用内置的日期编辑器。

【问题讨论】:

  • 添加您的操作以查看发生了什么
  • 您能详细说明一下吗?我已经使用 MVC 一周了。我在控制器中设置了 RequestDate 并将其传递到视图中。这还不够吗?
  • 应该够了,但是,检查您的模型以及您添加的注释可能与 DisplayFormat 相关
  • 啊,我想可能是因为它是日期而不是日期时间/
  • 你能告诉我们你是如何将模型传递给你的视图吗?只是为了排除那里的任何错误

标签: asp.net-mvc razor


【解决方案1】:

这似乎引起了很多混乱,让我很恼火!

如果你使用DataType.Date,你需要这样设置:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

Chrome's date picker uses the local computer's short date format. 即使设置lang 标签也会被忽略;这是一个使用 Chrome 和 <html lang="en-GB"> 的示例:

Chrome 的日期选择器也使用本地计算机的区域设置。在页面加载时,将填充日期(如果已设置)并且用户可以选择新日期:

注意:如果您更改计算机的区域设置,您必须完全重新启动 Chrome 才能看到区域设置更改。

【讨论】:

  • 遗憾的是,此解决方案也会影响 DisplayFor(),因此您的所有日期都将以这种国际格式显示。
【解决方案2】:

最终

我是个白痴。我不知道 Chrome 有一个它添加的日期选择器。我认为这是 MVC 中内置的东西。我需要使用一个实际的 jquery 日期选择器。感谢大家提供的所有信息。

【讨论】:

  • 你不是唯一一个,只是发生在我身上,这条评论帮助我意识到了这一点。
  • 它的 HTML5 日期选择器,每个 HTML5 浏览器都实现了它自己。移动和桌面也不同,因此它是平台的原生并正确设置区域设置。我也花了一段时间才弄清楚这是怎么回事。但一旦你知道,你的老板。
【解决方案3】:

在模型中添加格式行

[Display(Name = "Time")]        
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
[DataType(DataType.Date)]
public DateTime RequestDate { get; set; }

更新

能否将模型属性 datetime 更改为字符串。并将您的日期时间对象转换为字符串!

或者您可以在您的编辑器字段中格式化该值。例如

@Html.TextBoxFor(model => model.FromDate, "{0:d}")

【讨论】:

  • 我试过了,它仍然只是显示“mm/dd/yyyy”。它变得非常奇怪。我正在使用 [DataType(DataType.Date)] 所以我可以拥有内置的日期编辑器。
  • 能否将模型属性日期时间更改为字符串。并将您的日期时间对象转换为字符串!
  • 所以你想让我说“public String RequestDate { get; set; }”?因为这会删除日期编辑器。
  • 是的。或者您可以在编辑器字段中格式化该值 .for 示例,例如 @Html.TextBoxFor(model => model.FromDate, "{0:d}")
  • 嗯,我试过 @Html.TextBoxFor(model => model.RequestDate, "{0:d}" 并显示日期,但该文本框不再有任何日期下拉菜单。
【解决方案4】:

实际上,直到我看到这篇文章,我才意识到 Chrome 和 IE 之间存在“日期选择器”差异,即使我从 MVC 的教程中获得了示例页面布局。

对于没有意识到差异的人,就像我之前所做的那样,请在下面找到比较:

【讨论】:

    【解决方案5】:

    这就是我在模型中的做法

    [Display(Name = "Effective Date")]
        [DataType(DataType.Date)]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MMM-yyyy}")]
        public DateTime? Effectivedate 
        {
            get { return EffectivedateEdit; }
            set { EffectivedateEdit = value; EffectivedateEdit = value; } 
        }
    
    
        [DataType(DataType.Date)]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
        public DateTime? EffectivedateEdit { get; set; }
    

    【讨论】:

      【解决方案6】:

      DataFormatString 必须完全像这样“{0:yyyy-MM-dd}”,然后只有@Html.EditorFor 才能与日期选择器控件一起使用。

      【讨论】:

        【解决方案7】:

        我遇到了同样的问题。如果您查看返回到控制器的 HTTP Post 以及 POST 中日期的格式,则它是 yyyy-MM-dd。

        我将我的数据注释更改为这个并且它工作......除了现在索引列表视图显示 yyyy-mm-dd 格式。并且编辑在日期选择器控件中显示 mm/mm/yyyy?

        添加到模型日期 -

        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")
        

        恕我直言,我自 1980 年以来看到的每个应用程序都使用了日期和时间。为什么MS先生还是一团糟?

        【讨论】:

          【解决方案8】:

          我也需要大约 5 天的时间来了解它是如何完成的,所以可能会对某些人有所帮助

          首先在模型中你应该有一行:[DataType(DataType.Date)]

          然后在视图中,你应该使用@Html.TextBoxFor 而不是@Html.EditorFor

          enter 
          
              [DataType(DataType.Date)]
              public DateTime Expireddate { get; set; }
          

          代码在这里

          查看如下:

          enter  <td>
          
                            
                              @Html.TextBoxFor(modelItem => item.Expireddate.Date, "{0:yyyy-MM-dd}",
          
                            new
                            {
                                onkeydown = "return  event.keyCode != 13",
                                @class = "form-control datepicker",
                                @type = "date",
                                @value = ToolShare.datetoStringyyyymmddviewnet(@item.Expireddate.Date),
                                id = @item.id,
                                onChange = "replaceContentsOfDivupdateExpireddate(this.id, this.value)"
          
                            })
          
          
                              @Html.ValidationMessageFor(modelItem => item.Expireddate)
                          </td>
          

          代码在这里

          函数 datetoStringyyyymmddviewnet 将日期时间转换为字符串,例如:yyyy-mm-dd

          enter  public static String datetoStringyyyymmddviewnet(DateTime datevalue)
              {
          
                  // yyyy-mm-dd  to date
          
                 
          
                  return datevalue.Year +"-" + datevalue.Month +"-"+ datevalue.Day;
              }
          

          代码在这里

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-27
            • 1970-01-01
            相关资源
            最近更新 更多