IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
matesax
Tvůrce
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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:26.8.2012 10:36

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

 
Nahoru Odpovědět
26.8.2012 10:36
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
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
Tvůrce
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
Tvůrce
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
Tvůrce
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
Tvůrce
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
Tvůrce
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
Tvůrce
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
Tvůrce
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
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
Tvůrce
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
Tvůrce
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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
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
Tvůrce
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
Tvůrce
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
Tvůrce
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
Tvůrce
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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
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
Tvůrce
Avatar
Odpovídá na David Hartinger
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
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
Tvůrce
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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
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
Tvůrce
Avatar
Odpovídá na David Hartinger
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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
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
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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
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
Odpovídá na David Hartinger
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.