Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

Diskuze: ASP.NET Core - vstup, pre zadanie ceny

Aktivity (4)
Avatar
Tadeáš Burda:3. srpna 13:15

Vo View mám takýto vstup pre zadávanie ceny(float):

<div class="form-group">
    <label asp-for="Price" class="control-label"></label>
    <input asp-for="Price" type="number" min="0.5" step="0.5" class="form-control" />
    <span asp-validation-for="Price" class="text-danger"></span>
</div>

Je to napojene na tento model:

[Display(Name = "Cena")]
[Required(ErrorMessage = "Vyplňte obsah")]
public float Price { get; set; }

Problém je že mi ide vložiť iba cele číslo.

Zkusil jsem: Pridal sem tam step="0.5" (rada z netu). Skúsil sem zmeniť na double/ decimal ale hádže to rovnakú chybu. Môžem si to nechať vložiť jak string a potom si to cez float.Parse() spraviť sám ale to je zbytočná robota naviac. Na forach pisaly neco otem že je to pre rozdielny zapis cisla podla krajiny, tak sem este do <html> pridal lang="sk" ale to byl len taký vystrel naslepo. Ešte sem rozmýšľal že by sa asi mohlo niekde zadať string.Format ale nepodarilo sa mi dohledat kde a ci to vôbec ide.

Chci docílit: Potrebujem na vstupe aby mohol užívateľ zadať cenu( "," neni poviná) a ta sa mi uložila do modelu.

Odpovědět 3. srpna 13:15
Myslieť, znamená hovno vedieť...
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Tadeáš Burda
Martin Petrovaj:3. srpna 13:19

Nie som si celkom istý čo za problém s tým môžeš mať. Nebude to desatinnou čiarkou? S bodkou to (aspoň mne) funguje správne

https://jsfiddle.net/wutfjkq6/

Editováno 3. srpna 13:20
Nahoru Odpovědět 3. srpna 13:19
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda:3. srpna 13:31

Tá desatina čiarka tam neni, to len Chrom mi to upravuje aby to tak vyzeralo. Napozadi tam je 3.5 , skúšal sem to v Edge, IE, Chrom. Všade to vyhadzuje to iste. No ani ja nechápem kde je problém :D , lebo očividne by tam byt nemnel.

Nahoru Odpovědět 3. srpna 13:31
Myslieť, znamená hovno vedieť...
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Tadeáš Burda
Martin Petrovaj:3. srpna 13:53

Skús upraviť kultúru tak, aby bola všade rovnaká. V súbore web.config budeš chcieť mať niečo takéto:

<configuration>
  <system.web>
    <globalization culture="en" uiCulture="en" />

Rovnaký jazyk chceš mať uvedený aj v HTML. Môžeš si ho potom upraviť na aký chceš, základom je, aby sa nestávalo, že napr. na frontende neprejde validáciou čiarka a na serveri neprejde bodka.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 3. srpna 13:53
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda:3. srpna 14:14

Dík, pomohlo to. Ja nato dosel pred minutu tes :DD , lebo mam db a tam sa mi ten float zapisuje z ",", takze problem byl asi vtem ze VS pomen chcelo cislo z carku a ten input zase z "." . MOhel by si mi este poradit ze jak donutim svoju db papat cisla z bodku? :D Lebo teraz mi to pada natem.

Nahoru Odpovědět 3. srpna 14:14
Myslieť, znamená hovno vedieť...
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Tadeáš Burda
Martin Petrovaj:3. srpna 14:24

Ak to budeš posielať do DB ako float a používaš nejaké zmysluplné ORM tak si myslím, že by to predsa malo fungovať aj tak… Ak nie, tak jednoducho použi

Price.ToString().Replace('.', ',');
Nahoru Odpovědět 3. srpna 14:24
if (this.motto == "") { throw new NotImplementedException(); }
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda:3. srpna 14:33

SQL ... Teraz sem to kukal cez debug v konzoly a jo je to tak ze mam ten float 3.5 a ked sa uložý do tabulky tak tam je 3,5 . Problem je ze ked potom nacitam Index z tabulku dat, tak pri tahani dat z tabulky mi to vyhodi InvalidCastEx­ception: Unable to cast object of type 'System.Double' to type 'System.Single'.. VS mi stejnak nedovoli ani v kode zapisat float f = 3,5f; . Skusim kuknut net co najdem, každopádne dik zapomoc

Nahoru Odpovědět 3. srpna 14:33
Myslieť, znamená hovno vedieť...
Avatar
Martin Petrovaj
Překladatel
Avatar
Martin Petrovaj:3. srpna 14:40

Nepomohlo by?

public double Price { get; set; }

a píše sa keď už tak float f = 3.5f; (vždy s bodkou)

Editováno 3. srpna 14:40
Nahoru Odpovědět 3. srpna 14:40
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda:3. srpna 14:53

Káááámo ty si fak BOH!!! (v) Jo to bylo ono :DDD Boze...je tam napsane
[Price] FLOAT (53) NOT NULL , nechapem proc to chce double este ked to tam vkladam ve float. To je jedno, fak dik moc....(potlesk)

Nahoru Odpovědět 3. srpna 14:53
Myslieť, znamená hovno vedieť...
Avatar
Odpovídá na Tadeáš Burda
Michal Štěpánek:3. srpna 14:59

Osobně radši používám na cenu datový typ decimal...

Nahoru Odpovědět  +4 3. srpna 14:59
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Tadeáš Burda
Martin Petrovaj:3. srpna 16:52

https://docs.microsoft.com/…transact-sql?…
https://docs.microsoft.com/…umeric-types

Ak sa pozrieš na presnosť floatu v SQL a dátových typov pre desatinné čísla v C# (a tým pádom aj na ich veľkosť), tak zistíš, že C# float ti pre dáta z tvojej databázy nemusí stačiť. Preto ti tá konverzia padala, potreboval si aspoň double (a je dobrý zvyk pri práci s financiami používať skôr decimal, ako písal Michal).

Videl si to aj v tej chybovej hláške:
InvalidCastEx­ception: Unable to cast object of type 'System.Double' to type 'System.Single'
Píše sa tam, že zlyhala konverzia (resp. cast, aby sme boli presní) z typu double na single (System.Single == float). Vieš, že problém s dátami nastáva v smere DB > aplikácia. Tu už ale potrebuješ vedieť rozdiel medzi single / float a double, ktorý je v ich kapacite, a ktorá bola v tvojom prípade na správnu konverziu nepostačujúca.

Nahoru Odpovědět 3. srpna 16:52
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda:3. srpna 17:18

Ja tej chybovej hláške úplne nerozumel, len to že je problém konverziu. Hlavne tomu že z db mi ide double, pritom v designeru je to ukázane jak float. Ešte sem sa stým nestretol. To stu čiarku v db to byla test blbost už sem si to dohledal. To len VS mňa to nútilo tak zapisovať lebo mam win v slovenčine. Dost mňa to zmiatlo a po 6h za PC sem sa nato strašne namotal :D Prepíšem to teda na decimal jestli je to best practice, abych si nato navikel. Osobne neco taketo robym prvy krat takze mam steho dost gulas. Ale diki zapomoc

Nahoru Odpovědět 3. srpna 17:18
Myslieť, znamená hovno vedieť...
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 12 zpráv z 12.