none
gerar DateTime Automaticamente RRS feed

  • Pergunta

  • Em um cadastro de produto simples, preciso fazer com que o sistema insira automaticamente a data no campo DataCadastro no momento em que eu for inserir um novo produto, como posso fazê-lo?

    domingo, 4 de setembro de 2016 17:28

Todas as Respostas

  • @DateTime.Now.ToShortDateString()

    Isso vai inserir a data do dia neste formato d/m/aaaa 


    • Editado Marcoos Junior segunda-feira, 5 de setembro de 2016 01:32
    • Marcado como Resposta A.FerreiraSS domingo, 11 de setembro de 2016 14:26
    • Não Marcado como Resposta A.FerreiraSS domingo, 11 de setembro de 2016 14:26
    segunda-feira, 5 de setembro de 2016 01:30
  • Na sua própria Model você pode definir um valor padrão:

    public DateTime Data {get; set;} = DateTime.Now;

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 5 de setembro de 2016 11:16
  • Mas dessa forma ele não salvaria no banco, certo?

    pois eu tenho na minha classe um propriedade data

    segunda-feira, 5 de setembro de 2016 11:42
  • Depende,

    Você está usando Entity Framework?

    De qualquer forma quem decide se vai gravar é você. Só acho que fica mais legível você já definir um valor padrão na sua própria model para que assim que criar o registro (novo objeto da sua classe) o valor já venha preenchido sem ter que alimentá-lo toda vez. Se você estiver gravando no banco de dados a partir de um novo objeto que criou da sua classe, aí salvaria sim no banco.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 5 de setembro de 2016 11:57
  • Devo estar fazendo alguma coisa errada, continua aparecendo apenas um campo vazio.

      public partial class teste
        {
    
            [Key]
            public int Codigo { get; set; }
            public string Nome { get; set; }
            public DateTime DataCadastro { get; set; } = DateTime.Now;
        }

    <div class="form-group"> @Html.LabelFor(model => model.DataCadastro, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.DataCadastro, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.DataCadastro, "", new { @class = "text-danger" }) </div> </div>


    segunda-feira, 5 de setembro de 2016 13:54
  • Inicializa no constrututor, da seguinte forma:
    
    public partial class teste
    
    {
               public teste()
           {
               DataCadastro = new DateTime.Now();
            }
    
    
            [Key]
            public int Codigo { get; set; }
            public string Nome { get; set; }
            public DateTime DataCadastro { get; set; } 
        }

    segunda-feira, 5 de setembro de 2016 13:58
  • E sua Controller como está?

    Você está na View de Edit ou de Create?


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 5 de setembro de 2016 13:59
  • é a view Create

    o controller eu não mexi

    public class testesController : Controller
        {
            private BANCOTESTEEntities1 db = new BANCOTESTEEntities1();
    
            // GET: testes
            public ActionResult Index()
            {
                return View(db.teste.ToList());
            }
    
            // GET: testes/Details/5
            public ActionResult Details(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                teste teste = db.teste.Find(id);
                if (teste == null)
                {
                    return HttpNotFound();
                }
                return View(teste);
            }
    
            // GET: testes/Create
            public ActionResult Create()
            {
                return View();
            }
    
            // POST: testes/Create
            // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
            // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Create([Bind(Include = "Codigo,Nome,DataCadastro")] teste teste)
            {
                if (ModelState.IsValid)
                {
                    db.teste.Add(teste);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
    
                return View(teste);
            }
    
            // GET: testes/Edit/5
            public ActionResult Edit(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                teste teste = db.teste.Find(id);
                if (teste == null)
                {
                    return HttpNotFound();
                }
                return View(teste);
            }
    
            // POST: testes/Edit/5
            // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
            // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Edit([Bind(Include = "Codigo,Nome,DataCadastro")] teste teste)
            {
                if (ModelState.IsValid)
                {
                    db.Entry(teste).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(teste);
            }
    
            // GET: testes/Delete/5
            public ActionResult Delete(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                teste teste = db.teste.Find(id);
                if (teste == null)
                {
                    return HttpNotFound();
                }
                return View(teste);
            }
    
            // POST: testes/Delete/5
            [HttpPost, ActionName("Delete")]
            [ValidateAntiForgeryToken]
            public ActionResult DeleteConfirmed(int id)
            {
                teste teste = db.teste.Find(id);
                db.teste.Remove(teste);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    db.Dispose();
                }
                base.Dispose(disposing);
            }
        }

    segunda-feira, 5 de setembro de 2016 14:04
  • Você está se referindo que no momento ANTES de inserir não aparece a data no campo de texto, pois bem não irá aparecer mesmo, pois o valor só será preenchido no momento que clicar em CRIAR. E se é um valor que o usuário nem irá alterar nem tem porque mostrar na tela. Eu tiraria ele da tela e a controller deixaria assim:

        public class testesController : Controller
        {
            private BANCOTESTEEntities1 db = new BANCOTESTEEntities1();
    
            // GET: testes
            public ActionResult Index()
            {
                return View(db.teste.ToList());
            }
    
            // GET: testes/Details/5
            public ActionResult Details(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                teste teste = db.teste.Find(id);
                if (teste == null)
                {
                    return HttpNotFound();
                }
                return View(teste);
            }
    
            // GET: testes/Create
            public ActionResult Create()
            {
                return View();
            }
    
            // POST: testes/Create
            // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
            // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Create([Bind(Include = "Codigo,Nome")] teste teste)
            {
                if (ModelState.IsValid)
                {
                    db.teste.Add(teste);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
    
                return View(teste);
            }
    
            // GET: testes/Edit/5
            public ActionResult Edit(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                teste teste = db.teste.Find(id);
                if (teste == null)
                {
                    return HttpNotFound();
                }
                return View(teste);
            }
    
            // POST: testes/Edit/5
            // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
            // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Edit([Bind(Include = "Codigo,Nome")] teste teste)
            {
                if (ModelState.IsValid)
                {
                    db.Entry(teste).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(teste);
            }
    
            // GET: testes/Delete/5
            public ActionResult Delete(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                teste teste = db.teste.Find(id);
                if (teste == null)
                {
                    return HttpNotFound();
                }
                return View(teste);
            }
    
            // POST: testes/Delete/5
            [HttpPost, ActionName("Delete")]
            [ValidateAntiForgeryToken]
            public ActionResult DeleteConfirmed(int id)
            {
                teste teste = db.teste.Find(id);
                db.teste.Remove(teste);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    db.Dispose();
                }
                base.Dispose(disposing);
            }
        }


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 5 de setembro de 2016 14:10
  • Tentei dessa forma também não funcionou, pois não está puxando valor e se eu retirar conforme mostrou no controller, quando vou salvar ele não permite salvar, retornando que é uma operação invalida
    domingo, 11 de setembro de 2016 14:51
  • Provavelmente está retornando que é uma operação inválida pois possui algum tipo de validação para esse campo (O que não vejo o porquê), uma vez que o valor sempre será preenchido com o valor da data atual.

    Tenta retirar essa linha:

    @Html.ValidationMessageFor(model => model.DataCadastro, "", new { @class = "text-danger" })


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 12 de setembro de 2016 11:58
  • Já tentei também não funciona, estou pensando em alguma forma de fazer isso via banco de dados, ou seja fazer o banco de dados pegar a data do próprio banco e salvar. Isso já resolveria meu problema

    domingo, 18 de setembro de 2016 14:38
  • Consegui da seguinte forma

    Na classe

     public partial class teste
        {
    
            [Key]
            public int Codigo { get; set; }
            public string Nome { get; set; }
            public DateTime DataCadastro { get; set; } = DateTime.Now.Date;
        }

    No controller

      [HttpPost]
            public ActionResult Create(Teste teste)
            {

                teste.DataCadastro = DateTime.Now.Date;

                if (ModelState.IsValid)
                {
                    db.Teste.Add(teste);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }

                return View(teste);
            }

          

    No model a propriedade DataCadastro foi necessário receber o parâmetro DateTime.Now pois estava aparecendo uma mensagem de erro de conversão ao salvar na edição dos cadastros, ao passar o parâmetro para a propriedade DataCadastro a mesma ficou definida com o tipo de dado certo.

    No controller, dentro da Action create eu chamei a propriedade e passei novamente o parâmetro para ela, assim ela recebe o valor e logo após já entra no IF para salvar. Porém, não consegui mostrar no cadastro o valor da data, que no caso para o meu sistema não tem importância.

    Agradeço quem ajudou.

    sexta-feira, 4 de novembro de 2016 12:36