C# 如何在ASP.NET Core MVC中获取当前日期?

C# 如何在ASP.NET Core MVC中获取当前日期?,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我是新加入.NETCore的,所以我所做的是用标题、日期、描述和图片创建文章 这是我的模型 public class Article { [Key] public int Id { get; set; } [StringLength(200)] [Required(ErrorMessage = "Required")] public string ArticleTitle { get; set; } [DisplayFormat(DataFor

我是新加入.NETCore的,所以我所做的是用标题、日期、描述和图片创建文章

这是我的模型

public class Article
{
    [Key]
    public int Id { get; set; }

    [StringLength(200)]
    [Required(ErrorMessage = "Required")]
    public string ArticleTitle { get; set; }

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

    public DateTime ArticleDate { get; set; }

    [DataType(DataType.MultilineText)]
    public string ArticleDescriotion { get; set; }
    public string ArticleImage { get; set; }
}
这是控制器

public IActionResult CreateArticle()
{
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult CreateArticle(Article article)
{
    if (ModelState.IsValid)
    {
        context.Articales.Add(article);
        context.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(article);
}
这就是观点

<div class="form-group">
    <label asp-for="ArticleDate" class="col-md-4 control-label" ></label>
     <input asp-for="ArticleDate" class="form-control">
</div>


我可以手动输入日期,它工作正常,但我希望它自动加载当前日期。

使用DateTime.UtcNow获取当前计算机上的当前日期和时间,以协调世界时(UTC)表示。

如果您希望用当前日期时间加载视图,可以使用以下方法:

public class Article
{
    ... your current code

    public Article()
    {
        ArticleDate = DateTime.Now;
    }
}
或者,可以直接将模型传递到视图:

public IActionResult CreateArticle()
{
    var model = new Article { ArticleDate = DateTime.Now };
    return View(model);
}
请注意,通过使用
DateTime.Now
,日期可能不是客户端访问页面的日期(由于时区的原因)。如果您的用户和服务器都在同一时区,这将很好。
如果希望使用UTC日期而不是运行应用程序的服务器的日期,可以使用
DateTime.UtcNow
,但这并不总是有帮助的。如果要显示每个客户机的实际日期,则需要在客户机中加载日期(即通过JavaScript)

但是,我建议您不要直接使用实体(表示表的类)。查看如何使用ViewModels


通过您的更新,我了解问题所在。
LabelTagHelper
(使您能够在
中使用
asp for
)呈现属性的描述,而不是属性的值。这是因为标签是用来描述它们后面的内容,而不是它们的内容

模型

public class Article
{
    [Key]
    public int Id { get; set; }

    [StringLength(200)]
    [Required(ErrorMessage = "Required")]
    public string ArticleTitle { get; set; }

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

    public DateTime ArticleDate { get; set; }
    public Article()
    {
        ArticleDate = DateTime.Now;
    }

    [DataType(DataType.MultilineText)]
    public string ArticleDescriotion { get; set; }
    public string ArticleImage { get; set; }
}
景色

  <label asp-for="ArticleDate" class="col-md-4 control-label">@Html.DisplayFor(Model => Model.ArticleDate)</label>
@Html.DisplayFor(Model=>Model.ArticleDate)

这是我的工作,非常感谢所有人,特别是@Camilo Terevinto

我一直在努力做到这一点,我想我会发布这个答案,因为我刚刚找到了答案,我无法找到任何其他方法

如果使用标准ASP.NET标识并创建自定义数据模型,则可以覆盖页面模型的OnPostAsync方法中的默认值:

//Override values for created by and date
Blog.CreatedDate = DateTime.Now;
Blog.CreatedBy = User.Identity.Name.ToString();
在这里定义值而不是在表单上定义值意味着人们不可能过度发布数据

因此,该方法现在看起来像:

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    //Override values for created by and date
    Blog.CreatedDate = DateTime.Now;
    Blog.CreatedBy = User.Identity.Name.ToString();

    _context.Blogs.Add(Blog);
    await _context.SaveChangesAsync();

    return RedirectToPage("./Index");
}
公共异步任务OnPostAsync() { 如果(!ModelState.IsValid) { 返回页(); } //覆盖“创建人”和“日期”的值 Blog.CreatedDate=DateTime.Now; Blog.CreatedBy=User.Identity.Name.ToString(); _context.Blogs.Add(Blog); wait_context.SaveChangesAsync(); 返回页首(“/索引”); } 然后,您可以从页面上的表单中删除这些字段(如果您已按照数据模型中的要求设置了字段,则该字段必须作为隐藏字段保留在表单上,并指定了一个值,否则表单将不会提交-我只是将该值设置为X,因为我正在覆盖它):


希望这能帮助别人


罗宾

那么你有什么特别的问题?明确你想要什么时间。这是正在生成网页的服务器上的当前时间还是正在查看网页的用户的当前时间?我没有问题,因为有错误,现在我手动输入日期,但我希望它获取当前日期(date.now)自动出现在标签中,当单击“创建”按钮时,它将获取日期并插入到DBIS中,其中应使用DateTime。现在,在控制器、视图或模型中???以及如何使用它您可能希望标签为“文章日期”,输入显示实际日期。请注意
DateTime。现在
将使用服务器的时区。这几乎总是个坏主意。@SteveWright抱歉,我不明白你为什么这么说。@JonSkeet是的,我完全知道,谢谢。更新中提到我使用u提供的第二种方法,当创建断点时,我会看到今天的当前日期,但问题是,当页面加载时,标签上会显示当前日期,并且在单击“创建”按钮后,它不会存储今天的日期,所以我从数据库中获得的是01/01/0001
<div class="form-group">
    <input asp-for="Blog.CreatedBy" class="form-control" value="X" hidden />
    <span asp-validation-for="Blog.CreatedBy" class="text-danger"></span>
</div>