如何在数据库中写入当前日期?

问题描述:

我想将当前日期传入文本框,因为用户无法在此字段中输入值。这将写入数据库。我这样做,我不能在数据库中写入,因为表中的字段为空,这不记录。我怎样才能做到这一点?如何在数据库中写入当前日期?

@Html.TextBox("DATA_HORA", string.Format("{0:dd/MM/yyyy}", DateTime.Now), new { disabled = "disabled", @readonly = "readonly", Style = "width:100px;" }) 

谢谢大家。

- 编辑 -

我使用ADO.NET实体框架。创建控制器时会自动生成“创建”页面。

- EDIT 2 -

我的控制器:

namespace enChamados.Controllers 
{ 
    public class ChamadosController : Controller 
    { 
     private enChamados_ModeloContainer db = new enChamados_ModeloContainer(); 

     // 
     // GET: /Chamados/ 

     public ViewResult Index() 
     { 
      return View(db.CHAMADOS.ToList()); 
     } 

     // 
     // GET: /Chamados/Details/5 

     public ViewResult Details(int? id) 
     { 
      CHAMADOS chamados = db.CHAMADOS.Find(id); 
      return View(chamados); 
     } 

     // 
     // GET: /Chamados/Create 

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

     // 
     // POST: /Chamados/Create 

     [HttpPost] 
     public ActionResult Create(CHAMADOS chamados) 
     { 
      if (ModelState.IsValid) 
      { 
       db.CHAMADOS.Add(chamados); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(chamados); 
     } 

     // 
     // GET: /Chamados/Edit/5 

     public ActionResult Edit(int? id) 
     { 
      CHAMADOS chamados = db.CHAMADOS.Find(id); 
      return View(); 
     } 

     // 
     // POST: /Chamados/Edit/5 

     [HttpPost] 
     public ActionResult Edit(CHAMADOS chamados) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Entry(chamados).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      return View(); 
     } 

     // 
     // GET: /Chamados/Delete/5 

     public ActionResult Delete(int? id) 
     { 
      CHAMADOS chamados = db.CHAMADOS.Find(id); 
      return View(chamados); 
     } 

     // 
     // POST: /Chamados/Delete/5 

     [HttpPost, ActionName("Delete")] 
     public ActionResult DeleteConfirmed(int id) 
     {    
      CHAMADOS chamados = db.CHAMADOS.Find(id); 
      db.CHAMADOS.Remove(chamados); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      db.Dispose(); 
      base.Dispose(disposing); 
     } 
    } 
} 
+2

目前还不清楚这个UI元素如何与DB相关......你能澄清一下吗? – 2013-03-25 16:36:03

+0

http://forums.asp.net/t/1665457.aspx – 2013-03-25 16:38:38

+0

当然。我正在使用ADO.NET实体框架。创建控制器时会自动生成“创建”页面。 – 2013-03-25 16:41:38

布赖恩P回答你能为这个领域

创建HTML编辑器中创建一个DateTime EditorTemplate(添加文件夹名为Views \ Shared文件夹中的EditorTemplates)像这样:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Nullable<System.DateTime>>" %> 
<% if (Model.HasValue) 
    { %> 
    <%: Html.TextBox("" , String.Format("{0:ddd, MMM d, yyyy}" , Model.Value) )%> 
<% } 
    else 
    { %> 
    <%: Html.TextBox("" , String.Format("{0:ddd, MMM d, yyyy}" , DateTime.Now) )%> 
<% } %> 

从您的角度看我们Ë

<%: Html.EditorFor(model => model.nameOfYourField) %> 
+0

你好琼。我很抱歉,但我在ASP.NET MVC中很新。我不太明白这个解决方案。 部分地说:“创建一个DateTime EditorTemplate(在Views \ Shared文件夹中添加一个名为EditorTemplates的文件夹),像这样:”我需要在Shared文件夹中创建一个新的类或新的视图? – 2013-03-25 17:10:53

+0

是它只是一个Views/Shared/EditorTemplates中的新视图,通过继承到'System.Web.Mvc.ViewUserControl >'假设您的属性是可以为空的日期时间..或者如果它只是由datetime是否是日期时间。通过调用'EditorFor'方法,系统知道在哪里可以找到编辑器模板并将其应用于您的财产 – 2013-03-25 17:59:04

+0

对不起,我无法做到。我使用Razor引擎,对我来说很复杂。无论如何,感谢您的关注。 – 2013-03-25 18:12:56

如果你想设置一个日期上不应该改变的模式,那么你应该使用文本字段。不仅没有理由在视图图层中传递信息,而且如果模型联编程序可以访问该字段,则可能会更改该信息。如果最终用户知道如何在浏览器中使用开发工具,即使隐藏,禁用或只读字段也可以修改。

在控制器刚刚成立日期:

[HttpPost] 
public ActionResult Create(CHAMADOS chamados) 
{ 
    if (ModelState.IsValid) 
    { 
     chamados.CreatedDate = DateTime.Now; 
     db.CHAMADOS.Add(chamados); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(chamados); 
} 

或者这样的事情在那里你基本上设置默认值时,它通常是容易只是把它架在你的模型:

private DateTime? createdDate = null; 
public DateTime CreatedDate 
{ 
    get { return createdDate ?? DateTime.Now; } 
    set { createdDate = value; } 
} 

然后,你不必在你的控制器中做任何事情。 CreatedDate将自动填入保存的当前日期和时间。