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

Mah*_*oud 0 c# asp.net-core-mvc asp.net-core

我是.net核心的新手,所以我所做的是创建标题,日期,描述,图像的文章

这是我的模特

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; }
}
Run Code Online (Sandbox Code Playgroud)

这是控制器

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);
}
Run Code Online (Sandbox Code Playgroud)

这是观点

<div class="form-group">
    <label asp-for="ArticleDate" class="col-md-4 control-label" ></label>
     <input asp-for="ArticleDate" class="form-control">
</div>
Run Code Online (Sandbox Code Playgroud)

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

SO *_*ood 9

如果要使用当前DateTime加载视图,可以使用:

public class Article
{
    ... your current code

    public Article()
    {
        ArticleDate = DateTime.Now;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以直接将模型传递给视图:

public IActionResult CreateArticle()
{
    var model = new Article { ArticleDate = DateTime.Now };
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

请注意,通过使用DateTime.Now,日期可能不是客户端访问页面的日期(由于时区).如果您的用户和服务器都在同一时区,这就没问题了.如果您想要UTC日期而不是运行应用程序的服务器的日期,
您可以使用DateTime.UtcNow,但这并不总是有帮助.如果要显示每个客户端的实际日期,则需要在客户端中加载日期(即通过JavaScript).

但是,我建议您不要直接使用实体(代表表的类).查看使用ViewModels.


通过您的更新,我看到了问题所在.在LabelTagHelper(什么使您能够使用asp-for<label>)呈现属性的描述,而不是它的价值.这是因为标签用于描述其后的内容,而不是其内容.