Avatar
vajkuba1234
Člen
Avatar
vajkuba1234:

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. ledna 23:43
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
milos.loub
Člen
Avatar
Odpovídá na vajkuba1234
milos.loub:

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. ledna 6:33
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na milos.loub
vajkuba1234:

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. ledna 9:56
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
milos.loub
Člen
Avatar
Odpovídá na vajkuba1234
milos.loub:

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. ledna 11:34
 
Nahoru Odpovědět 12. ledna 11:34
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na milos.loub
vajkuba1234:

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. ledna 11:45
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
JOF
Tým ITnetwork
Avatar
Odpovídá na vajkuba1234
JOF:

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. ledna 13:00
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na JOF
vajkuba1234:

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

Nahoru Odpovědět 12. ledna 13:17
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na JOF
vajkuba1234:

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. ledna 18:51
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
JOF
Tým ITnetwork
Avatar
Odpovídá na vajkuba1234
JOF:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 12. ledna 20:20
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na JOF
vajkuba1234:

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

Nahoru Odpovědět 12. ledna 21:36
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
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.