NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: ASP.NET MVC - Time stamp

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
vajkuba1234
Člen
Avatar
vajkuba1234:11.1.2016 23:43

Caute, mam projekt v asp.net mvc, kdy mam v modelu nekolik vlastnosti a chtel bych mezi nimi i vlastnost pro zapis aktualniho casu, kdy byl zaznam vytvoren. Takova casova znamka.

Problem nastava tehdy, chci-li editovat zaznam a nasledne jej ulozit. Data se ani nedotknu, ale pri spusteni akce edit se vlastnost s datem vynuluje a ja ji musim zadavat znova, coz je velmi neprakticke. Chci, aby ta znamka byla vytvorena automaticky. Prikladam onen model:

using System;
using System.ComponentModel.DataAnnotations;

namespace Knihovna2.Models
{
    public class Kniha
    {
        [Key]
        public int IdKniha { get; set; }

        [Display(Name = "Název knihy")]
        public string NazevKniha { get; set; }

        [Display(Name = "Autor knihy")]
        public string AutorKniha { get; set; }

        [Display(Name = "Rok vydání")]
        public int RokVydaniKniha { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
        [Display(Name = "Přesné datum")]
        public DateTime DateTime { get; set; }

        [Display(Name = "Předmluva knihy")]
        public string PredmluvaKniha { get; set; }

        [Display(Name = "Obsah knihy")]
        public string ObsahKniha { get; set; }

        [Display(Name = "Cesta k obrázku")]
        public string UrlObrazekKniha { get; set; }

        [Display(Name = "Aktivní?")]
        public bool IsAvailable { get; set; }
    }
}
Odpovědět
11.1.2016 23:43
No hope, no future, JUST WAR!
Avatar
milos.loub
Člen
Avatar
Odpovídá na vajkuba1234
milos.loub:12.1.2016 6:33

Pokus pouzivas C# v6 (Visual studio 2015), je mozne u kazde vlastnosti nastavit default value pri inicializaci:

public DateTime CasovaZnamka { get; set; } = DateTime.Now;
 
Nahoru Odpovědět
12.1.2016 6:33
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na milos.loub
vajkuba1234:12.1.2016 9:56

Pouzivam VS 15 a u projektu mam nastaven .NET 4.5.2, ale nevim, zda to je C# 6. Jakmile budu doma, urcite to zkusim.

Mam jeste dotaz. Pokud by mi tento zpusob sel, ulozi se tedy vzdy aktualni datum i pri editaci, ze? Ja bych to chtel mit formou, jako je to na zpravodajskych serverech:
Vytvoreno 24.1.2015. (Upraveno 27.2.2015).

Zkratka, vytvorim zaznam -> ulozi se aktualni datum. Edituji zaznam -> datum vytvoreni zustava nezmeneno, prida se pouze datum upravy.

Nahoru Odpovědět
12.1.2016 9:56
No hope, no future, JUST WAR!
Avatar
milos.loub
Člen
Avatar
Odpovídá na vajkuba1234
milos.loub:12.1.2016 11:34

Ve VS 15 je C# 6 standardně.

Aha, v tom případě na tu počáteční inicializaci zapomeň,ta se tedy nehodí pro Tvůj případ. Pokud chceš udržovat údaje o datumu stylem Vytvořeno/upraveno, vytvořil bych vlastnosti dvě.
Jednu jako DatumVytvoreni a druhou jako DatumZmeny.

  1. Při vytváření nového záznamu a po jeho uložení nastavíš obě vlastnosti na DateTime.Now.
  2. Při editaci už jen pracuješ s DatumZmeny.
Editováno 12.1.2016 11:34
 
Nahoru Odpovědět
12.1.2016 11:34
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na milos.loub
vajkuba1234:12.1.2016 11:45

Ano, to vse vim, ale problem je ten, ze kdyz chci editovat zaznam, musim znovu vyplnit datum vytvoreni, viz model:

[DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
        [Display(Name = "Přesné datum")]
        public DateTime DateTime { get; set; }

To znamena, ze kdyz kliknu na editaci zaznamu, tak nemuzu jen tak dat ulozit, protoze musim znovu zadat ono datum. Ja ale chci, aby to datum se vyplnilo jako ostatni pole a ja do nej nemusel zasahovat, kdyz to neni potreba...

Nahoru Odpovědět
12.1.2016 11:45
No hope, no future, JUST WAR!
Avatar
JOF
Tvůrce
Avatar
Odpovídá na vajkuba1234
JOF:12.1.2016 13:00

Datum vytvoření při editaci vůbec nezobrazuj a po odeslání formuláře si jej doplň z DB podle Id editovaného záznamu (samozřejmě ještě před uložením změn).

 
Nahoru Odpovědět
12.1.2016 13:00
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na JOF
vajkuba1234:12.1.2016 13:17

Zajímavý tip. Kouknu na to inhed po práci. Děkuji :)

Nahoru Odpovědět
12.1.2016 13:17
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na JOF
vajkuba1234:12.1.2016 18:51

Vůbec se mi nedaří vytahnout to datum z databaze pred jeho ulozenim. Mohl bys mi, prosimte, poradit? Prikladam akci Edit k nahlednuti:

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "IdKniha,NazevKniha,AutorKniha,RokVydaniKniha,DatumVytvoreni,PredmluvaKniha,ObsahKniha,UrlObrazekKniha,IsAvailable")] Kniha kniha)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Entry(kniha).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
            }
            catch (DataException /* dex */)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.
                ModelState.AddModelError("", "Nedošlo k uložení. Kontaktujte administrátora!");
            }

            return this.View(kniha);
        }
Nahoru Odpovědět
12.1.2016 18:51
No hope, no future, JUST WAR!
Avatar
JOF
Tvůrce
Avatar
Odpovídá na vajkuba1234
JOF:12.1.2016 20:20

Ta moje rada asi nebyla nejlepší :-( Asi by to tak šlo, ale mnohem jednodušší by mělo být mít to DatumVytvoření v editačním formuláři jako skryté pole (podobně jako IdKniha) a pak bys asi nemusel nic z DB doplňovat...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
12.1.2016 20:20
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na JOF
vajkuba1234:12.1.2016 21:36

Super. Dekuji moc. Nakonec to bylo nejlepsi reseni meho problemu. To me mohlo napadnout. :D

Nahoru Odpovědět
12.1.2016 21:36
No hope, no future, JUST WAR!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.