Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
matesax
Redaktor
Avatar
matesax:26.8.2012 10:24

Dobrý den,
mám následující problém:

Inherits="Neweb.Views.Shared.SiteMaster"

using System;

namespace Neweb.Views.Shared
{
    public partial class SiteMaster : System.Web.Mvc.ViewMasterPage
    {
        protected void TimerClock_Tick(object sender, EventArgs e)
        {
            LabelClock.Text = DateTime.Now.ToLongTimeString() + Environment.NewLine + DateTime.Now.Date.ToShortDateString();
        }
    }
}

Proč to nefunguje? Děkuji.

 
Odpovědět 26.8.2012 10:24
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:26.8.2012 10:34

Mě stále nedochází, jak chceš mít timer na serveru. Stránka se na serveru sestaví, okamžitě se pošle prohlížeči a skript se zastaví. Ten timer se nikdy nespustí. Toto musíš dělat u klienta přes JS:

Nahoru Odpovědět 26.8.2012 10:34
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:26.8.2012 10:36

Ale ve šňuře mi to šlapalo...

 
Nahoru Odpovědět 26.8.2012 10:36
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:26.8.2012 10:40

Pokud šňůrou myslíš Web Forms, tak to mají nějak nasimulované. IMHO je návrh Web Forms špatně, zbytečně se snaží za každou cenu nasimulovat určitý přístup, který se na web vůbec nehodí a hlavně ani není potřeba. Tohle by fungovat prostě nemělo, udělej to přes JavaScript.

Nahoru Odpovědět 26.8.2012 10:40
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Drahomír Hanák:26.8.2012 10:41

Mám takový dojem, že to generuje JavaScript, jinak to nevidím. @metasax@ zkus si to napsat sám v JS. To bude myslím lepší.

 
Nahoru Odpovědět 26.8.2012 10:41
Avatar
matesax
Redaktor
Avatar
Odpovídá na Drahomír Hanák
matesax:26.8.2012 11:20

Jenže to má háček - timer musí být na serveru a JS musí být u klienta... :)

 
Nahoru Odpovědět 26.8.2012 11:20
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:26.8.2012 11:21

A co by dělal timer na serveru? Tam nemá co pohledávat.

Nahoru Odpovědět 26.8.2012 11:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Drahomír Hanák
matesax:26.8.2012 11:21

Jedině vytvořit timer v JS - což asi nejde...

 
Nahoru Odpovědět 26.8.2012 11:21
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:26.8.2012 11:22

Když smažu runat, napíše mi to error - chybí runat type...

 
Nahoru Odpovědět 26.8.2012 11:22
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:26.8.2012 11:23

A kde jsi sebral, že Javascript musí být u klienta? Je spousta serverů, které Javascript používají.

Nahoru Odpovědět 26.8.2012 11:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:26.8.2012 11:24

Když dám ve script tagu runat, nic uvnitř nejde - vše zrudne...

 
Nahoru Odpovědět 26.8.2012 11:24
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:26.8.2012 11:24

Vím, že to jde - ale v mém příadě to nejde - ani by ty hodiny nešly...

 
Nahoru Odpovědět 26.8.2012 11:24
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na matesax
Drahomír Hanák:26.8.2012 11:25

Tak s tím musím nesouhlasit. Timer nemá na serveru co dělat (nevztahuj si to k ASP, ale spíš obecně). Když chceš něco dynamicky měnit bez obnovení stránky, musíš použít klienta.

var hodiny = $('#hodiny');
setInterval(function() {
   var date = new Date();
   hodiny.text( date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds() );
}, 1000);
 
Nahoru Odpovědět 26.8.2012 11:25
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:26.8.2012 11:26

Jaké hodiny? K čemu? Ty se snažíš dělat na serveru hodiny? Vždyť je nikdo nepotřebuje.

Nahoru Odpovědět 26.8.2012 11:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
matesax:26.8.2012 11:29

No ten timer bez atributu runat prostě nejde a jedinou možnost mám dát server - jiná tam není...

 
Nahoru Odpovědět 26.8.2012 11:29
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:26.8.2012 11:32

Server ti pouze vygeneruje stránku, to je jednorázová operace, jakmile dorazí ke klientovi do prohlížeče, tak již se serverem nemáš spojení. Timer bude v JavaScriptu a výpis času bude také v JavaScriptu. Oboje u klienta.

Nahoru Odpovědět 26.8.2012 11:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:26.8.2012 11:33

Tohle je přesně proč nemám rád Web Forms, protože blbnou vývojáře a ten pak neví, jak HTTP protokol funguje :) Zapomeň chvilku na ASPčko a použij ten kód od Drahoše.

Nahoru Odpovědět 26.8.2012 11:33
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:26.8.2012 11:34

Ještě jsi nám nenapsal, co vlastně chceš dělat, k čemu ten timer či runat potřebuješ a jaký má být výsledek. Když ani nedokážeš specifikovat zadání, tak se těžko radí. Podle mne se snažíš vyrobit nesmysl.

Nahoru Odpovědět 26.8.2012 11:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:26.8.2012 11:45

Podívej se nahoru - ptal jsem se, proč mi nejde kód, který běžně používám...

 
Nahoru Odpovědět 26.8.2012 11:45
Avatar
matesax
Redaktor
Avatar
Odpovídá na Drahomír Hanák
matesax:26.8.2012 11:48

Děkuji - mám ale problém - nemohu nějak dostat element z id labelu - zkusul jsem normálně jen getElementById(id labelu) - a pak:

getElementById('<%= LabelClock.ClientID %>')

Ani jedno nefunguje - jak na to? Děkuji.

 
Nahoru Odpovědět 26.8.2012 11:48
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:26.8.2012 11:49

Respektive nevím, kde je problém - prostě se mi neobjevuje žádný text...

 
Nahoru Odpovědět 26.8.2012 11:49
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:26.8.2012 11:49

Ale nenapsal jsi, jakou chybu to hlásí.

Nahoru Odpovědět 26.8.2012 11:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:26.8.2012 11:51

Tak ještě jednou, zapomeň na ASPčko :D Udělej si prázdnou HTML stránku a tam si to odlaď. Potom to teprve zakomponuj do ASP.NET.

Nahoru Odpovědět 26.8.2012 11:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:26.8.2012 11:52

No to je vidět, že ASP nepoužíváš... Napsal jsem vše potřebné...

 
Nahoru Odpovědět 26.8.2012 11:52
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:26.8.2012 11:53

Ale jak zjistím, že to je správně?

 
Nahoru Odpovědět 26.8.2012 11:53
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na matesax
Drahomír Hanák:26.8.2012 11:54

Možná nemáš ten prvek ještě načtený. V JavaScriptu se musí čekat na DOM, pokud s ním chceš manipulovat nebo ten javascript musíš umístit pod daný prvek (HTML dokument se i s JS zpracovává odshora dolů). Pokud to máš v externím souboru, použij window.onload = function() { /** Tvůj JS kód */ } Jinak doporučuji používat jQuery, VisualStudio ti ji tam i samo dodá.

 
Nahoru Odpovědět 26.8.2012 11:54
Avatar
matesax
Redaktor
Avatar
Odpovídá na Drahomír Hanák
matesax:26.8.2012 11:59

Nenapadá tě, jak to otestovat? Takhle jsem úplně slepý - nemám tucha... :)

 
Nahoru Odpovědět 26.8.2012 11:59
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:26.8.2012 11:59

Řekl bych že tak, že to bude fungovat. Nerozumím otázce, stačí ten Drahošův kód vložit do HTML stránky, připojit jQuery a dát tam nějaký div s příslušným ID.

Nahoru Odpovědět 26.8.2012 11:59
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:26.8.2012 12:03

Máš pravdu, ASP nepoužívám. Jede jen na minoritní platformě a je obestřeno hromadou záhad.

Své otázky volím tak, abys sám přišel na řešení svého problému.

Nahoru Odpovědět 26.8.2012 12:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:26.8.2012 12:53

Mám jQuery, mám div s ID clock a kód hoře:

<script type="text/javascript">

    setInterval(function () { var hodiny = $('#clock'); var date = new Date(); hodiny.text( date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds() ); }, 1000););

</script>

A nic se neděje...

 
Nahoru Odpovědět 26.8.2012 12:53
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:26.8.2012 12:57

Tak ho dej před

</body>

Nebo do události DOM ready.

Nahoru Odpovědět 26.8.2012 12:57
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:26.8.2012 13:03

Vyzkoušel jsem všechny polohy :), a je to timer - mělo by být jedno, zda je stránka načetlá - časem se načte a pak by se měl začít měnit text...

 
Nahoru Odpovědět 26.8.2012 13:03
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na matesax
Drahomír Hanák:26.8.2012 13:12

Chtělo by se to kouknou do konzole. Máš tam středník a závorku navíc. Kdybys ty kódy formátoval, viděl bys to :` Tady je snad funkční kód :)

<script type="text/javascript">
setInterval(function() {
  var hodiny = $('#clock');
  var date = new Date();
  hodiny.text( date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds() );
}, 1000);
</script>
 
Nahoru Odpovědět 26.8.2012 13:12
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:26.8.2012 13:18

Nejsem si jistý, jestli je to jedno, protože se ti nevrátí ten element a ty s ním pracuješ, hodí to chybu a ten timer se nemusí zavést. Často jedna chyba zabije zavedení celého skriptu.

Nahoru Odpovědět 26.8.2012 13:18
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Drahomír Hanák
matesax:26.8.2012 13:20

Konečně - děkuji! Funguje to....

 
Nahoru Odpovědět 26.8.2012 13:20
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Drahomír Hanák:26.8.2012 13:41

V tomhle případě to ani nevypíše error. jQuery si totiž spojené prvky ukládá do pole. To by v případě, že element ještě není načten, bylo prázdné, takže by se jQuery ani nepokusilo někde měnit text. Pokud by použil klasický DOM, ukončilo by to jednu anonymní funkci TypeErrorem. Interval už by ale byl zaregistrovaný, takže by se prováděl dál.

 
Nahoru Odpovědět 26.8.2012 13: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 37 zpráv z 37.