[Asp.Net MVC]proměnná mezi controllery

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod dyžon 3. 12. 2019 08:28

Zdravím všichni,
mám ve své webové aplikaci dva controllery a potřeboval bych si mezi něma poslat proměnnou:
v _Layoutu mám dva linky do těchto controllerů.
_Layout
Kód: Vybrat vše
<a class="nav-link" href="@Url.Action("Index", "PRVNI", new { cislo = ViewBag.Pocet2 })">PRVNI</a>
<a class="nav-link" href="@Url.Action("Index", "DRUHY", new { cislo = ViewBag.Pocet })">DRUHY</a>

PRVNI controller
Kód: Vybrat vše
public ActionResult Index(int? cislo)
{
     ViewBag.Pocet = cislo;
}

DRUHY controller
Kód: Vybrat vše
public ActionResult Index(int? cislo)
{
     int Pocet2 = cislo.HasValue ? cislo.Value : 10;
     ... bla bla ...

     Pocet2 = 15;
}

no a když kliknu v _Layoutu na odkazy DRUHY, Pocet2 je 15, a pak zpátky na PRVNI, cislo v PRVNIm controleru je 10, i když ho v DRUHYm controlleru změním na 15, pořád se předává hodnota, která byla proměnné Pocet2 přiřazena jako první.
existuje nějaký způsob, jak si mezi controllerama předávat nějakou dynamickou proměnnou bez ajaxu ??
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 3. 12. 2019 20:13

Tak prvně bych viděl, že u DRUHÉHO controlleru nic nenastavuješ - pouze přiřazuješ proměnné "Pocet2" nějakou hodnotu. To u PRVNÍHO controlleru konečně nastavuješ něco do Viewbagu.

Nicméně bych předpokládal, že aby to celé fungovalo, tak se bude muset předávat celý Viewbag ( resp. ty dvě potřebné proměnné ).

Jinak by mělo jít předávat parametry tak, jak jsi to napsal - ale bude to ve formě GET.
Pokud chceš POST, tak je toto celkem hezký způsob
https://stackoverflow.com/questions/223 ... url-action
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 4. 12. 2019 09:18

díky moc, ..
v DRUHYM controlleru má být místo Pocet2 = 15;
ViewBag.Pocet2 = 15; a to je v podmínce.
Kód: Vybrat vše
public ActionResult Index(int? cislo)
{
     int Pocet2 = cislo.HasValue ? cislo.Value : 10;
     ... bla bla ...
   
     if (bla bla)
     {
         ViewBag.Pocet2 = 15;
     }
}

pokud jdu z PRVNIHO do DRUHYHO, cislo = null; a tak se Pocet2 přiřadí hodnota 10,
potom dále v code ji v nějaké podmínce změním na Pocet = 15;
když se ale odkazem vrátím na PRVNI, tak se cislo = 10;
je to hodnota, která se jako první přiřadila proměnné Pocet2. pokud ji kdykoliv potom změním, do PRVNIho controlleru mi příjde vždycky cislo = 10;
a tím pádem, když se potom opět vrátím do DRUHYho, tak cislo = 10; a já bych potřeboval aby cislo = 15;

vlastně jednodušeji:
v PRVNIm je nějaká stránka s úvodem, ve DRUHYm je tabulka s možností vybrat počet zobrazených řádků.
defaultně 10; když změním počet řádků na 15 a opustím stránku, při vrácení zpět se nastaví počet na defaultních 10;
pokouším se ten počet řádků přenést do PRVNIho a vrátit zpátky do DRUHYho, což možná dělám špatně.
a nechci do toho plést zatím coocies.

prozatím to řeším pomocí Session["cislo"] = ..(to je vidět všude a je to dynamické)... ale nevím, jestli je to úplně správně.
mrknu i na ten link, děkuji.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 8. 12. 2019 22:47

Princip je takový, že k nové stránce by měl jít jen obsah ViewBagu aktuální. Nic se nepřidává automaticky z předchozího stavu. To by pak v tom Viewbagu byl pěkný bordel.

Pokud si něco k tomu nevytvoříš, tak Session postačí. Jen to chce promyslet důkladně - toto řešení nelze aplikovat globálně na vše.
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 10. 12. 2019 14:48

děkuji to mi zatím stačí ..
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků