Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Avatar
Petr Klekner
Člen
Avatar
Petr Klekner:17.8.2018 6:33

Ahoj, programuji v .net mvc a mám jeden problém. Budu se snažit vysvětlit můj problém co nejlépe. Mám přehled například studentů v tabulce. První sloupeček v této tabulce jsou checkboxy. Je zde i tlačítko, které všechny označené studenty pošle do akce, která dá všem hromadně známku, kterou zadám. Scénář je následující: Vyberu si například 3 studenty, pošlu si je do akce, která mi sestaví formulář na zadání známky 1. otázka - Jak ty studenty uchovat, než se klikne na post formuláře? V tempdata? Vložit si je na stránku jako hidden fieldy? Poté co se klikne na odeslat, žákum se odešlou dané známky. 2. otázka - Problém nastává hlavně v tom, že když si člověk zadá url do vyhledavače může se mu formulář otevřít například bez studentů. Moje otázka tedy zní jaký je nejlepší postup u takového problému? Předem všem děkuji za odpověď.

Zkusil jsem: Hledal jsem na googlu, ale přesně nevím jak tento dotaz zadat.

Chci docílit: Správné vytvoření akce.

Editováno 17.8.2018 6:34
 
Odpovědět
17.8.2018 6:33
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:17.8.2018 8:48

Nedelam s temi jazyky. A uplne nechapu problem. Co ktery pojem z tech vet ma presne udelat z hlediska html kodu, uchovani dat nebo tak. Zkusim odpovedet na zaklade php, ktere je asp podobne.

Mas html formular s tabulkou studentu + checkboxy pro kazdy radek. Zaskrtas lidi, kliknes odeslat a stane se co?
V checkbox value je id studenta? Melo by byt.
Www prohlizec posle tato id na server.
Program na serveru prevezme data. Co s nimi ma provest dal?
--
'pošlu si je do akce, která mi sestaví formulář na zadání známky '
Lze to chapat tak, ze chces hned uzivateli poslat jinou stranku, kde bude seznam, tabulka jen tech 3 studentu a on vyplni 3 dalsi policka se znamkou?
To data nepotrebujes uchovavat vubec, jen proste pripravis novy html kod. Ale pro pripad F5 si to muzes v php ulozit do session. V pripade, ze ta akce trva dele, ze ten formular se ma zobrazit, kdyz ucitel klikne, ze chce akci ohodnotit, tak si do databaze (mssql, mysql, oracle, ... (nebo do souboru, treba format csv se da otevirat i v excelu)) ulozis do tabulky propojeni akce + id studenta. Pak si muzes zobrazit seznam akci. A po rozkliknuti akce mu zobrazis seznam studentu. A jestli ten student ma nebo nema znamku.
--
Pokud nepotrebujes nic ukladat, muzes uzivateli ten novy formular vygenerovat pomoci javascriptu. Nepotrebujes nic odesilat na server.

--

Ta verze php + sql by vypada takto. V sql mas tabulky o studentech

tab studenti
id_student | jmeno | prijmeni | adresa | rc ...
1 | tomas | holecek | na parezu 5, praha 1
2 | marketa | novotna | pod parezem 13, liberec

tab studia (obory)
id_obor | nazev | popis | rocnik | rok | od | do
1 | Gastronomie | blabla | 1 | 2018

tab student_obor
id_obor, id_student
1 | 1
1 | 2

akce
id_akce | typ | nazev | popis | datum konani | vytvoril
1 | pisemka | Pisemka z matematiky 1 | blabla | 12.3.2018 | Mgr. Jaroslav Janecek

akce_student
id_akce | id_student
1 | 1
1 | 2

Sql prikaz, ktery ti vytahne vsechny studenty na akci:

SELECT os.jmeno, os.prijmeni
FROM akce_student a
LEFT JOIN studenti os ON a.id_student=os.id_student
WHERE a.id_akce=1

php kod, ktery to zobrazi by vypadal asi takto

$conn = mysql_connect('server', 'user', 'psw'); // pripojeni ke sluzbe sql
$query = "SELECT ... ";
$result = mysql_query($query) // dotaz na sql
while ($row = mysql_fetch($result)) // parsovani dat ziskanych dotazem do pole, pripadne vypis pres echo
{
echo $row[jmeno]
echo $row[prijmeni]
}
mysql_disconnect() // odpojeni

U nas pouzivame na ruzne testy a studijni materialy php program Moodle.
Evidence znamek resi java program b. Ale zvazujeme levnejsi variantu, brnenske MU, system Muni.
Maminka, co ma jednu slednu na stredni pouzivala jakysi online system, ktery kdosi provozuje a je tam vice skol. Nevim uz nazev, zkusim google. Tusim, ze by to mohlo byt toto:
https://www.skolaonline.cz/
Netusim, co vsechno tam jde delat ci nedelat. Ona se jen potrebovala doklikat k vysledkum sve dcerky, protoze mela podezreni, ze skolu flaka. Coz se nepotvrdilo :)

Editováno 17.8.2018 8:51
 
Nahoru Odpovědět
17.8.2018 8:48
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:17.8.2018 8:53

Temi odkazy dole chci rici, ze mozna zbytecne ztracis cas vlastni tvorbou. Moodle testy studentu resi sam. Stag ma zas evidenci studentu.

 
Nahoru Odpovědět
17.8.2018 8:53
Avatar
Martin Petrovaj
Redaktor
Avatar
Odpovídá na Petr Klekner
Martin Petrovaj:17.8.2018 12:20

Ak to robíš v MVC tak predpokladám, že študentov si do tabuľky posielaš v nejakom ViewModeli. Ak VM pre študenta obsahuje aj nejakú premennú, ktorá označuje, či je daný študent označený checkboxom alebo nie, tak podľa mňa super - nestačilo by ti potom VM tej tabuľky v postbacku prejsť cyklom (alebo LINQ), vybrať označených študentov a nad nimi ďalej robiť čo už potrebuješ (napr. odoslať tú známku)?

Je to len také pseudo, narýchlo a môžu tam byť chyby, ale snáď z toho lepšie pochopíš, ako to myslím:

[HttpGet]
public ActionResult Prehled()
{
    var studenti = // nacteni studentu z databaze
    var model = new List<StudentViewModel>();
    foreach (var student in studenti)
        model.Add(new StudentViewModel(student));
    return View(model);
}

[HttpPost]
public ActionResult Prehled(List<StudentViewModel> model, int znamka)
{
    // klasicka validace odeslanych dat atd
    foreach (var student in model)
                if (student.JeZaskrtlej)
                        // pridej mu znamku
        // ...
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
17.8.2018 12:20
if (this.motto == "") { throw new NotImplementedException(); }
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 4 zpráv z 4.