【问题标题】:How to get current date and time in view?如何查看当前日期和时间?
【发布时间】:2016-01-30 21:22:31
【问题描述】:

我想查看当前日期和时间。

我做了什么:

  1. 在 Vs 2013 社区中为 asp.net mvc5 (c#) 创建了一个新项目
  2. 为我的数据库添加了 edmx。所以它首先是数据库。
  3. 使用 Add > new scaffolded item 为我的每个数据库类添加了 Model-View-Controller。
  4. VS 为 CRUD 操作创建了视图和控制器。
  5. 现在一个视图中有两个字段,分别代表日期和时间。
  6. 早期的 VS 创建了简单的文本框,但我在模型中添加了注释,因此它在视图中创建了 Datepicker 和 TimePicker。
  7. 我想要的是两个字段中的当前日期和时间。

型号:

[DataType(DataType.Date)]
public Nullable<System.DateTime> Date { get; set; }
[DataType(DataType.Time)]

查看:

    <div class="form-group">
    @Html.LabelFor(model => model.Date, htmlAttributes: new { @class = "control-label col-md-2"})
    <div class="col-md-10">

        @Html.EditorFor(model => model.Date, new { htmlAttributes = new { @class = "form-control"} })
        @Html.ValidationMessageFor(model => model.Date, "", new { @class = "text-danger" })
    </div>
</div>

<div class="form-group">
    @Html.LabelFor(model => model.Time, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Time, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Time, "", new { @class = "text-danger" })
    </div>
</div>

控制器:

public ActionResult Create()
{
    return View();
}

这些是日期和时间选择器。我想知道实际的当前日期和时间

到目前为止我所尝试的:

使用@value = @model.returndate = DateTime.Now;

model.returndate 总是出错。我尝试在控制器和视图中使用。

使用Viewbag.Date = DateTime.Now; 并在视图@Value = @Viewbag.Date 中没有任何反应。

【问题讨论】:

  • 是的。是的。只是这里有问题。
  • 在将模型返回视图之前需要在 GET 方法中设置值 - model.Date = DataTime.Today; return View(model); 并且需要将 [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 属性应用到属性(注意 ISO 格式)跨度>
  • 这对我来说是新的。模型.日期=数据时间.今天;给出错误“名称模型在当前上下文中不存在”。
  • 您需要先在 GET 方法中初始化模型 - var model = new YourModel(); model.Date = DateTime.Today; return View(model);(您应该始终将模型的实例返回给视图
  • 另请注意,&lt;input type="date" .. /&gt;EditorFor() 生成的内容,仅 Chrome 支持。在 IE 和 FireFox 中它只会显示一个普通的文本框。如果您想要一致的 UI,最好使用 jquery datepicker。

标签: c# asp.net asp.net-mvc entity-framework date


【解决方案1】:

当您使用ModelEditorFor 从模型的属性中显示您的日期时,您应该在返回视图之前设置它:

public ActionResult Create()
{
    return View(new YourModel { Date = DateTime.Now } );
}

【讨论】:

    【解决方案2】:

    当您绑定到模型属性时,您想要的值必须在模型属性或ModelState 中设置(由来自RequestViewDataViewBag 的值组成) .

    出于您的目的,最合适的方法是设置模型属性的值。您可以按照@ken2k 的建议手动执行此操作,也可以使用自定义 getter 将其设置为属性的默认值:

    [DataType(DataType.Date)]
    private DateTime? date;
    public DateTime Date
    {
        get { return date ?? DateTime.Today; }
        set { date = value; }
    }
    
    [DataType(DataType.Time)]
    private DateTime? time;
    public DateTime time
    {
        get { return time ?? DateTime.Now; }
        set { time = value; }
    }
    

    现在,这两个属性将始终设置为显式值或当前日期/时间。

    注意:我使用DateTime.Now 作为时间值,但你应该小心。通常,您应该始终使用 UTC 作为时间,然后根据需要转换为本地时间/从本地时间转换。主要问题是 ASP.NET 中的本地时间是 服务器时间,这可能是也可能不是用户操作的时间,甚至是您的组织正在操作的时间。尤其是如果您执行类似的操作在 Azure 或类似站点中设置站点以在不同国家/地区进行负载平衡以获得更高的可用性,然后本地时间变得毫无意义,实际上是灾难性的。

    【讨论】:

    • 所做的是:在我的模型中[DataType(DataType.Date)] private DateTime? date; public DateTime Date { get { return date ?? DateTime.Today; } set { date = value; } } 在我的控制器中:在为获取创建操作中:Transaction tr = new Transaction(); tr.Date = DateTime.Now; 这给日期和时间也在同一个文本框中。 [DataType(DataType.Time)] private DateTime? time; public DateTime time { get { return time ?? DateTime.Now; } set { time = value; } } 抛出异常:imgur.com/AAe7DiS
    • 您的 EDMX 与实体类不同步。您需要更新您的 EDMX 和/或数据库(如果 EDMX 是由此生成的)。或者,扔掉所有的 EDMX 垃圾,使用 Code First。见:cpratt.co/entity-framework-code-first-with-existing-database
    【解决方案3】:

    在到处查看之后,我这样做是为了实现我的目标,即查看当前日期和时间。

    由于它是数据库优先方法,我需要找到模型类,它位于 Model.edmx>model.tt>mycalss.cs 下。

    然后我添加了注释,例如 Chris Pratt 的回答。这给了我日期和时间,但没有日期选择器。

    现在我去了 nuget 包管理,在项目中添加了 jquery UI。去这里:jQuery Date picker

    它为我提供了漂亮的、适合移动设备的日期选择器以及当前日期。

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多