Diskuze: ASP - Code Behind

C# .NET .NET (C# a Visual Basic) ASP - Code Behind American English version English version

Avatar
matesax
Redaktor
Avatar
matesax:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

Ř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:

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:

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:

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:

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:

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:

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:

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:

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.