【问题标题】:How to write the current date in the DB?如何在数据库中写入当前日期?
【发布时间】:2013-03-25 16:33:32
【问题描述】:

我正在尝试将当前日期传递到文本框中,因为用户无法在此字段中输入值。这将写入数据库。我这样做的方式是,我不能在数据库中写入,因为表中的字段是 NULLABLE,所以不记录。我该怎么做?

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

谢谢大家。

-- 编辑--

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

-- 编辑 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);
        }
    }
}

【问题讨论】:

  • 不清楚这个 UI 元素与数据库的关系...你能澄清一下吗?
  • 当然。我正在使用 ADO.NET 实体框架。 “创建”页面是我创建控制器时自动生成的。
  • 你能分享你的控制器动作吗?

标签: c# asp.net-mvc date razor time


【解决方案1】:

正如 Brian 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) %> 

【讨论】:

  • 你好琼。对不起,我在 ASP.NET MVC 中还很新。我不太明白这个解决方案。部分内容是“创建一个 DateTime EditorTemplate(在 Views\Shared 文件夹中添加一个名为 EditorTemplates 的文件夹),如下所示:”我需要在 Shared 文件夹中创建一个新类或一个新视图?
  • 是的,它只是 Views/Shared/EditorTemplates 中的一个新视图,通过继承到 System.Web.Mvc.ViewUserControl&lt;Nullable&lt;System.DateTime&gt;&gt; 假设您的属性是一个可为空的日期时间.. 或者如果它只是一个日期时间,则将其替换为日期时间。通过调用EditorFor 方法,系统知道在哪里可以找到编辑器模板并将其应用于您的属性
  • 很抱歉我做不到。我使用 Razor 引擎,对我来说很复杂。无论如何,感谢您的关注。
【解决方案2】:

如果您想在模型上设置一个不应更改的日期,那么您应该使用文本字段。不仅没有理由在视图层中传递信息,而且如果模型绑定器可以访问该字段,它可能会被更改。如果您的最终用户知道如何在他们的浏览器中使用开发工具,即使隐藏、禁用或只读字段仍然可以修改。

在你的控制器中设置日期:

[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 将自动填充当前保存的日期和时间。

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2014-05-09
    • 2016-08-27
    • 2013-03-06
    • 2012-10-18
    相关资源
    最近更新 更多