2013-03-25 56 views
0

我想將當前日期傳入文本框,因爲用戶無法在此字段中輸入值。這將寫入數據庫。我這樣做,我不能在數據庫中寫入,因爲表中的字段爲空,這不記錄。我怎樣才能做到這一點?如何在數據庫中寫入當前日期?

@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

回答

0

布賴恩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

0

如果你想設置一個日期上不應該改變的模式,那麼你應該使用文本字段。不僅沒有理由在視圖圖層中傳遞信息,而且如果模型聯編程序可以訪問該字段,則可能會更改該信息。如果最終用戶知道如何在瀏覽器中使用開發工具,即使隱藏,禁用或只讀字段也可以修改。

在控制器剛剛成立日期:

[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將自動填入保存的當前日期和時間。

相關問題