Diskuze: ASP.NET Core zapamatavanie si hodnot
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Prečo si nevytvoríš jeden ViewModel pre všetky operácie a ten si nepredávaš? PS: Používaj tlačítko pre vkladanie kódu.
ViewModel
public class KalkulackaViewModel
{
public int Cislo1 { get; set; }
public int Cislo2 { get; set; }
public int Vysledek { get; private set; }
public void Plus()
{
Vysledek = Cislo1 + Cislo2;
}
public void Minus()
{
Vysledek = Cislo1 - Cislo2;
}
}
}
View
@using Models
@model KalkulackaViewModel
<form method="post">
<input asp-for="@Model.Cislo1"/>
<input asp-for="@Model.Cislo2"/>
</form>
<p>@Model.Vysledek</p>
<a asp-action="Plus">Plus</a>
<a asp-action="Minus">MInus</a>
Controller
public IActionResult Index(KalkulackaViewModel model)
{
return View(model);
}
public IActionResult Plus(KalkulackaViewModel model)
{
if (ModelState.IsValid)
{
model.Plus();
return RedirectToAction(nameof(Index), model);
}
return View(model);
}
Napr.. Ale netestroval sem to...Tady je nato dost dobrý turotial, tak by sis
to mnel asi pozornejsi precitat a zistis kde mas chybu
Presne tu kalkulacku som skusal a ja som to urobil nachval ze to mam rozdelne to je jedno ci by to bola kalkulacka alebo nejaky formular alebo tabulka, proste chcel by som docielit toho ze ked sa prepinas medzi view tak aby si zapamatalo to co som vyberal ci napisal, ked som na tom istom view talk samozrejme mi to zapamata ale ked sa prepnem tak uz nie, dovod je ze je v metode ktora sa vola tak vytvara sa nova instancia. Ked som to skusal dat do kontruktoru controlleru tak sa to vytvara opat.
Úplně jsem nepochopil, co a v které fázi chceš ukládat...
Pokud chceš ukládat již provedené výpočty, použij sesstion, statickou
proměnnou nebo databázi.
Pokud chceš ukládat co jsi zadal v prohlížeči ale ještě neodeslal ke
"zpracování", použij localstorage, webstorage, cookies nebo ajax.
Snad se mě tě podařilo nasměrovat...
Ak ta správne chápem tak chceš mat jeden ViewModel a ten posielať medzi viac View. Tak to neviem ci ide, lebo ak sa sa odkazes na niaky View, tak sa spusti jeho Get metoda. Ta ti vygeneruje novy ViewModel(mozes si to spravit sam a naplnit ho datamy) a pouzije ho pre View. No a ty potom vo View vlozis data do toho modelu a potom cez <input type="submint"/> ho odosles do Post metody pre ten View. Tam by si ho mohol poslat do dalsej Post metody pre ini View. No ale ak ti mas v tom View napr. <a> href="/.../Minus>Mínus"<a> tak ten model sa neposle, lebo sa spusti Get metoda pre ten Mínus a ta vygeneruje novy ViewModel pre ten Mínus. Takze tie hodnoty si budes muset vzdy uložit niekde ked sa ti odosle ViewModel do Post metody pre ten View a naplnit si nový VIewModel ked sa ti spusti Get metoda pre ten nový View. Snad sem poradil.
V zásadě to můžeš "obejít" pomocí razor partial view. Dalším řešením je shared view a do něj vložíš jednotlivé další views, které potřebuješ. Vše pak budeš mít pod jedním kontrolerem i modelem.
Este mam otazky, ok mal by som jeden kontroler a jeden model, v stadardnom vygenerovanom projekte ASP.NET Core MVC je tam _layout.cshtml _viewstart.cshtml index.cshtml. V tom layoute mam navigacnu listu kde si prepinam medzi pohladnmi a volaju sa GET metody. Kde by som mal zavolat ten spolocny model, teda kde ho vytvorit? A potom preco ked klikam na navigacnu listu a pozeram pohlady, tak sa mi vzdy vola konstruktor kontrolera? Myslel som, ze sa kontroler vytvara iba raz a nie vzdy po kliku na navigacnu listu. Chapem to zle, ze kotroleri sa vytvoria iba raz po celu dobu spustenia aplikacie, ak nie tak potom ako to funguje?
V podstatě rozdělíš controller na 2 části. Například:
public class KalkulackaController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Index(KalkulackaViewModel kalkulackaViewModel)
{
if
{
try
{
//tvuj kod
}
catch (Exception ex)
{
ModelState.Clear();
ViewBag.Message = $" Ooops! Někde máme problém... {ex.Message}";
}
}
return View();
}
}
a do view si nahoru přidáš razor:
@model Kalkulacka.Models.KalkulackaViewModel
V podstatě rozdělíš view v controlleru na 2 části - když tam vstoupíš a když odešleš. Ta část když odešleš jen vypíše někam výsledek a kalkulačka tam stále bude připravená, jako když bys vstoupil na stránku poprvé.
V navigaci pak budeš přistupovat ke kalkulačce voláním controlleru kalkulacka, např:
<li class="nav-item">
<a class="nav-link" asp-area="" asp-controller="Home" asp-action="Index">Home</a> </li>
<li class="nav-item">
<a class="nav-link" asp-area="" asp-controller="Kalkulacka" asp-action="Index">Kalkulačka</a>
</li>
<li class="nav-item">
<a class="nav-link" asp-area="" asp-controller="Home" asp-action="Index">Kontakt</a></li>
Snad ti toto pomůže
Omlouvám se za špatné formátování kódu, ale Visul Studio si to snad
přebere
Zobrazeno 11 zpráv z 11.