0

ユーザーがこのフィールドに値を入力できないため、現在の日付をテキストボックスに渡そうとしています。そして、これはDBに書き込みます。このようにすると、DBに書き込むことができなくなります。これは、テーブルのフィールドがNULL可能であるため、記録されないためです。これどうやってするの?

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

皆さん、ありがとうございました。

- 編集 -

ADO.NETEntityFrameworkを使用しています。コントローラを作成すると、「作成」ページが自動的に生成されました。

-編集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);
        }
    }
}
4

2 に答える 2

0

ブライアンPが答えたように、このフィールドのhtmlエディターを作成できます

次のようにDateTimeEditorTemplateを作成します(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) %> 
于 2013-03-25T16:56:48.783 に答える
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には、保存された現在の日時が自動的に入力されます。

于 2013-03-25T20:14:13.913 に答える