IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 6. diel - Obsluha formulárov v ASP.NET Core MVC

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
madewman
Člen
Avatar
madewman:27.6.2018 13:47

Dobrý deň,chcel by som sa opýtať čo znamená v tomto príkaze public int Cislo1 { get; set; } get a set?

Odpovedať
27.6.2018 13:47
"Whether you think you can, or you think you can't - you're right."(Henry Ford)
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovedá na madewman
Martin Petrovaj:27.6.2018 14:36

Ahoj, jedná sa o tzv. vlastnosť - viac sa o nich dočítaš v OOP kurze: https://www.itnetwork.cz/…tery-settery

Get a set označujú tzv. gettery a settery, čiže metódy, pomocou ktorých navonok sprístupňujeme chránené premenné objektu. V iných jazykoch, napr. C++ či Java, sa naozaj musia zapisovať ako bežné metódy:

public class BankoveKonto
{

        private int stavKonta;

        public int getStavKonta()
        {
                return stavKonta;
        }

        public void setStavKonta(int novaHodnota)
        {
                if (novaHodnota >= 0) { stavKonta = novaHodnota; }
                else { /* vyhoď chybu */ }
        }

}

Následné použitie niekde inde v kóde (len príklad, dalo by sa to implementovať samozrejme aj inak):

private BankoveKonto ucet;
//...

public void vyberPenize(int suma)
{
        try { ucet.setStavKonta( ucet.getStavKonta() - suma ); }
        catch { /* upozorni uživatele */ }
}

C# nám uľahčuje život tým, že nemusíme už písať celé metódy, ale gettery / settery vytvoríme ako tzv. vlastnosti. Ekvivalentom vyššie uvedenej triedy BankoveKonto s vlastnosťami by bol nejaký takýto kód:

public class BankoveKonto
{
        private int stavKonta;
        public int StavKonta
        {
                get { return stavKonta; }
                set
                {
                        if (value >= 0) { stavKonta = value; }
                        else { /* chyba */ }
                }
        }
}

// ...

public void vyberPenize(int suma)
{
        try { ucet.StavKonta -= suma; } // alebo ucet.StavKonta = ucet.StavKonta - suma;
        catch {  }
}

Vidíme, že už sa nemusíme trápiť s nejakými metódami a so StavKonta môžeme navonok pracovať, ako keby to bola obyčajná premenná.

Novšie verzie C# to posúvajú ešte trochu ďalej a umožňujú aj používanie tzv. auto-implemented properties (niečo ako "automaticky implementované vlastnosti"). Tie zápis getteru / setteru ešte viac skracujú, ak pre ne nepotrebuješ žiadnu vlastnú logiku, ale ide ti napr. len o vytvorenie navonok readonly premennej:

public class BankoveKonto
{
        //...
        public string Iban { get; private set; } // táto premenná bude zvonku prístupná len na čítanie
}

Dúfam, že už to je trochu zrozumiteľnejšie, určite by si sa mal pozrieť aj na celý článok, na ktorý som sa na začiatku príspevku odkázal. Ak by ti niečo ešte nebolo jasné, kľudne sa pýtaj :-)

Odpovedať
27.6.2018 14:36
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na madewman
David Hartinger:27.6.2018 14:47

Pokud nemáš načtený kurz OOP, tak je vážně nešťastný nápad číst takto pokročilé materiály.

Odpovedať
27.6.2018 14:47
New kid back on the block with a R.I.P
Avatar
Jakub Ondrák:30.6.2018 16:10

Hezky polopatě napsané a funguje :-) (kdybych nezapomněl v return View() parametr, tak by to fungovalo hned :-)

jen pro případné šťouraly by měl být case pro dělení následující, aby nebylo celočíselné:
case "/":
Vysledek = (double)Cislo1 / Cislo2;
break;

 
Odpovedať
30.6.2018 16:10
Avatar
deli
Člen
Avatar
deli:25.7.2018 20:43

Pri pokuse o spustenie aplikacie sa mi zobrazi nasledovny error:

 
Odpovedať
25.7.2018 20:43
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:26.7.2018 0:20

Pokud jste někde udělali chybu, v příští lekci si můžete také stáhnout kompletní kód projektu.

Odpovedať
26.7.2018 0:20
New kid back on the block with a R.I.P
Avatar
Adam Gajdečka:1.8.2018 9:55

Podle mě tam máte chybu, mělo by se používat IActionResult, ne?

Proč je tady jen ActionResult, který se již v Core nepoužívá?

public ActionResult Index()
{
        Kalkulacka kalkulacka = new Kalkulacka();
        return View(kalkulacka);
}
 
Odpovedať
1.8.2018 9:55
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Adam Gajdečka
David Hartinger:2.8.2018 18:28

Ahoj, díky, to byl překlep :) Opraveno.

Odpovedať
2.8.2018 18:28
New kid back on the block with a R.I.P
Avatar
Robert Hlavica:30.8.2018 9:22

Ahoj chtěl jsem se zeptat jaký je rozdíl mezi

<input asp-for="Cislo1" class="form-control" />

a

@Html.TextBoxFor(model => model.Cislo2, new { htmlAttributes = new { @class = "form-control" } })

?

a druhá věc jak spravně nastavit input pro double tak aby v české lokalizaci vzal 1,5 a v anglickké 1.5?

Díky

 
Odpovedať
30.8.2018 9:22
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovedá na Robert Hlavica
Martin Petrovaj:30.8.2018 9:42

Input tag helper a @Html helpery TextBoxFor a EditorFor sa funčne v niektorých prípadoch prelínajú. Výhodou použitia tag helperu je ale už len to, že tento jeden tag helper môžeš používať namiesto hneď dvoch @Html helperov, a hlavne výsledná šablóna vyzerá viac ako HTML kód a menej ako zmiešanina HTML s C# :-) Pre teba to možno až taký problém nie je, ale v okamihu, keď pracuješ na jednom produkte s ďalšími ľuďmi, ktorí toľko nepoužívajú C#, napr. web dizajnéri, frontenďáci atď. to môže celkom pomôcť.

https://docs.microsoft.com/…g-with-forms?…

Čo sa týka validácie desatinnej bodky a čiarky, to už je trochu zložitejšia téma (ktorá sa ale nevzťahuje len na Core). Ak ti stačí len vždy prijímať aj čiarku, aj bodku, máš možnosť jeden znak vždy vymeniť za iný (napr. nahradiť čiarku bodkou). Budeš sa ale musieť nejako zbaviť built-in validácie alebo ju obísť. Možno by šlo túto úpravu spraviť ešte pred odoslaním formulára aj na strane klienta pomocou Javascriptu, ale v tom sa až tak nevyznám :-) Ďalšia možnosť je napr. použiť svoj vlastný tag helper.

Určite skús najprv poriadne prehľadať Stack Overflow, MSDN a podobné stránky, stavím sa, že podobný problém tam už niekto riešil a nejaké použiteľné riešenie tam nájdeš. Skús napr. tu: https://stackoverflow.com/…737/10239417

Odpovedať
30.8.2018 9:42
if (this.motto == "") { throw new NotImplementedException(); }
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!