Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací
Avatar
Petr Klekner
Člen
Avatar
Petr Klekner:28. listopadu 17:55

Zdravím dělám v .net mvc a mám dotaz ohledně akcí. Mám detailovou stránku. To znamená, že mám akci Detail. Následně mám akci SendError v této akci se z formuláře pošle email. To znamená jsou zde políčka pro jméno, email a tělo. Pokud se vše provede jak má není žádný problém, jednoduše dojde na redirect na detailvou stránku. Pokud ale ne, tak to mám udělané takhle return View("cesta_k_vi­ew", model) To také funguje jak má, ale jediný problém je, že url adresa místo aby byla Sport/Detail/5 je Sport/ReportError. Chápu proč se to děje, ale chtěl bych aby se to dalo na tu akci detail nemůžu použít redirect prootže bych měl prázdné validace. Takže moje otázka: Chápu proč se tohle děje je to logický, ale dá se to nějak udělat?? Abych tam měl tu url jak chci? Předem moc díky. :)

Zkusil jsem: Zkoušel jsem hledat, ale přesně nevím jak to formulovat.

Chci docílit: Zobrazení požadované URL, pokud je to možné.

 
Odpovědět 28. listopadu 17:55
Avatar
Petr Klekner
Člen
Avatar
Petr Klekner:29. listopadu 6:47

nevíte nikdo?

 
Nahoru Odpovědět 29. listopadu 6:47
Avatar
Ilja Židkov
Člen
Avatar
Ilja Židkov:29. listopadu 7:36

Jinými slovy, potřebuješ přesměrovat z SendError zpět na Detail, že jo?

 
Nahoru Odpovědět 29. listopadu 7:36
Avatar
Odpovídá na Petr Klekner
Michal Štěpánek:29. listopadu 7:44

Myslím, že ukázka tvého kódu by určitě pomohla k rychlejšímu řešení...

Nahoru Odpovědět 29. listopadu 7:44
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Michal Štěpánek
Petr Klekner:29. listopadu 8:22

Dobrá přikládám kód. A ano jde mi o přesměrování, ale včetně validačních hlášek. Následující kód funguje jenom je špatně URL no v liště.

public ActionResult SendReport(SportModel model)
     {
         if(ModelState.IsValid)
         {
             .... //Odeslání emailu
             return RedirectToAction("Detail", "Sport", new { id = Model.ID });
         } else
         {
             return View("~/Views/Sport/Detail.cshtml", model);
         }
     }
 
Nahoru Odpovědět 29. listopadu 8:22
Avatar
Odpovídá na Petr Klekner
Michal Štěpánek:29. listopadu 8:27

A ten "původní" detail načítáš jak?

Nahoru Odpovědět 29. listopadu 8:27
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Michal Štěpánek
Petr Klekner:29. listopadu 8:34
public ActionResult Detail(int id)
{
    return AsView(Model);
}
 
Nahoru Odpovědět 29. listopadu 8:34
Avatar
Odpovídá na Petr Klekner
Michal Štěpánek:29. listopadu 8:36

Tak to mi toho moc neprozradilo. Co si vlastně představuješ pod tím "včetně validačních hlášek"?

Nahoru Odpovědět 29. listopadu 8:36
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Klekner
Člen
Avatar
Petr Klekner:29. listopadu 8:48

Pokud proběhne vše v pořádku dojde normálně na redirect a to je ok. :) Pokud ale nastane problém, není vyplněné pole nebo špatný formát emailu. Potřebuji přesměrovat zase na detail s validačními hláškami. Pokud použiju RedirectToAction(), tak ztratím validace a pokud použiju to co používám View("path", Model) tak to funguje, ale změní se mi url v liště a místo localhost/Spor­t/Detail/1234 mám localhost/Spor­t/SendReport

 
Nahoru Odpovědět 29. listopadu 8:48
Avatar
Odpovídá na Petr Klekner
Michal Štěpánek:29. listopadu 13:19

Nevím, jak to máš nastavené, ale já používám nastavení validací z ViewModelu a následně v Controlleru nepotřebuji už validaci kontrolovat. Pokud se něco nepovede udělám jen

return View(model);

a vrátím se zpět do modelu, ze kterého byla akce volána. Typicky používám stejně pojmenovaný ActionResult pro zobrazení i pro samotnou akci, jen ten akční je s atributem

[HttpPost]
Nahoru Odpovědět  +1 29. listopadu 13:19
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Klekner
vajkuba1234:30. listopadu 0:20

Pokud ti jde o to, abys uchoval informace z formulare v jednom view a predal je do jineho view, tak si pro tuto akci udelej proste viewmodel nebo nejake DTO, to napln pozadovanymi daty a predej ho prislusnemu view.

Pokud to neni ono, pak nechapu o co ti vlastne jde.

Nahoru Odpovědět 30. listopadu 0:20
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Michal Štěpánek
Petr Klekner:30. listopadu 23:06

Ale vždyť já to tak dělám také. Problém ale je, že tady by se mi to vrátilo do view SendReport a to nechci chci aby se mi to vrátilo do Detail. Což udělám jak jsem psal ale ta url je prostě blbá.

 
Nahoru Odpovědět 30. listopadu 23:06
Avatar
Odpovídá na Petr Klekner
Adam Gajdečka:8. prosince 12:05

dříve jsem také měl stejný problém. Aktuálně nikdy nepoužívám

return View("~/Views/cokoliv", model);

A těchto problémů jsem se zbavil. Chápu správně, že máš 2 akce na jedné stránce?

Pokud ano, tak vždy posílej request na stejnou Akci v kontroleru, jen s POST atributem. V té akci si rozliš, zda uživatel chce SendReport či něco jiného. Případně se mu vrátí validační hlášky a budeš mít správnou url :-)

 
Nahoru Odpovědět 8. prosince 12:05
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Adam Gajdečka
Petr Klekner:10. prosince 13:34

Jasný takhle mě to taky napadlo jenom mě štve, že to bude takhle "prasácky". Ale chápu že to nejspíše jinak nepůjde.

 
Nahoru Odpovědět  +1 10. prosince 13:34
Avatar
Odpovídá na Petr Klekner
don.jarducius:10. prosince 14:30

Tak zas tak beznadějný to není, můžeš si odesílat data na SendReport a v případě že se potřebuješ "vrátit" i s daty na stránku detailu si můžeš data formuláře poslat do detailu pomocí TempData do dalšího Actionu. TempData vydrží jedno "přenačtení" / přesměrování.

 
Nahoru Odpovědět 10. prosince 14:30
Avatar
SebelaMichal
Člen
Avatar
SebelaMichal:10. prosince 20:41

Omlouvám se, snad mě neukamenujete - ale co je to prasácký kód ?

  • Ten co má o tři písmenka víc ?
  • Ten co má navíc podmínku a post parametr ?
  • Ten co při F5 nefunguje správně ?
  • Ten co není dlouhodobě udržitelný?
  • Ten co není včas v deadline ?
  • Ten co zákazník nezaplatí ?
  • Ten, ve kterém se nikdo nevyzná, protože programátor nedodržuje vlastní koncepci ? Nebo ji nedokáže předat ?
  • Ten co je až příliš udržovaný, že se všechny finance použili na programování nedůležité části ?

Výše není myšleno špatně, jen se snažím ukázat na fakt, že např. u jednorázovky (pomocný nástroj pro vývoj, který je naprogramován za hodinku a nebude se dál rozvíjet, prasácký kód nevadí:)
Naopak pokud se vyvíjí dlouhodobě nějaký projekt - je důležitý čas, spokojený zákazník a výhled do budoucna. Lepší je dělat rozkouskovaný kód, který je znovupoužitelný i v jiných programech a pravidelné realease verzí ve větvích, zpětně kompatibilní revize knihoven apod. Občas prostě není možné stihnout vše hned, důležité je, aby bylo alespoň něco dle plánu, co je použitelné. A hlavně splynutí s týmem a dodržování koncepce týmu nebo celé firmy. Jinak se v tom prostě nikdo nevyzná.

Nikdy nejsou 100% ideální řešení, i když jsem se setkal s názorem, že vždy existuje pouze jedno nejlepší řešení - to samotné je věc pohledu. Ideální řešení může být řešení s největší pravděpodobností úspěchu < 100% v daném pohledu.
Svět si myslím je relativní, co je z jednoho pohledu dobře, je z jiného špatně.... A za dva dny je to jinak :)

To jen můj malý postřeh... Třeba někomu pomůže a třeba ten dotyčný otevře zas nějak oči mě :)

Vzpomínám si, že kdysi dávno jeden programátor bral anonymní metody jako prasárnu dotnetu. Dnes je to věřím bráno jako super věc (lambda výrazy, linq), které se navíc ani nevykonají, ale pouze převedou na sql

K tomu, co se tu řeší angular/react apod + web api nebo nějaký ajax+json. by to asi řešilo čistěji. Staré odesílání přes formulář je prostě nepraktické. Líp než mvc se s ním dle mého názoru vypořádávalo staré webforms pomocí viewstate, které moc lidí rádo nemá.

Zkrátka chci říct, že občas je lepší neřešit detaily. Chybama se člověk učí, největší chyba je nic nezkusit :)

 
Nahoru Odpovědět  +1 10. prosince 20:41
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 16 zpráv z 16.