ASP.NET + JavaScript   otázka

ASP.NET WebForms, JavaScript

Zdravím,

zajímalo by mě, jak efektivně řešit přístup JavaScriptu k elementům vytvořených pomocí ASP.NET. Například když vezmu tento formulář pro přidávání příspěvků. Když stisknu na tlačítko, kde je tučné B, tak mi to vloží text, který se následně převede na značky pro tučný text. Ale jak JavaScript dokáže určit, že jsem zrovna v tomto boxu. Nyní to řeším velmi neefektivně, že vytvořím form, spustím stránku a tím zjistím ID elementu, se kterým potom pracuji.

Dá se to řešit nějak automaticky?

Díky moc

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

Javascript se dá zakomponovat přímo do ASP.net kódu.Tz. že můžete pro různé událost přiřadit Javascript,co už bude dělat je jen na Vás ;)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, to vím, že každý element má definovatelné události, na které se naváže JavaScript (onselect, onmouseover, onclick...), ale jak docílit jednoduše a efektivně, že když mám formulář, kde je textové pole a tlačítko, kterému definuji onclick vlastnost, tak že mi přidá nějaký text do správného textového pole.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A proč to řešíte javascriptem a ne rovnou asp.net?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je dobrá otázka... to mě nenapadlo vyzkoušet. :-(

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No tak určitě bych to tak řešil.jelikož si na webu o asp.net,tak předpokládám že to chceš řešit pomocí asp.net a vytváříš asp.net stránky a ne javascript

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, jsem na stránkách o ASP.NET, ale to ještě neznamená, že nemohu používat i jiné technologie, ne? Jedná se mi o to, že některé věci zatím v ASP.NET neumím a je tedy lehčí a rychlejší využít technologie, které zvládám, nemyslíš?

Uvedu příklad, mám formulář pro vytvoření nějakého záznamu v databázi. a potřebuji, aby se mi po kliknutí na odkaz zobrazil obrázek. Jakmile kliknu někam na tento obrázerk, tak mi vyplní další tři pole formuláře (zobrazený obrázek, x a y souřadnice, kde jsem kliknul)...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ps. Tohle bez problému dokážu udělat v JavaScriptu, ale v ASP.NET ne... proto mi přijde jednoduchší implementovat JS.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To jako že když je web v ASP.NET, že se všechno musí dělat přes ASP.NET postbacky a ne javascriptem? Vy toho o vývoji webových aplikací víte asi hodně.

Každé řešení má svoje výhody a nevýhody, předpokládejme, že chceme třeba po kliknutí na tlačítko vyplnit TextBox. Pokud komponenty na formuláři aktualizujete javascriptem, stránka se neodesílá na server, běží to v klientově prohlížeči a pochopitelně na serveru se vám ani nevyvolají události Click a TextChanged. V některých hloupějších prohlížečích (mobily) nebo některým hloupějším uživatelům (kteří si o sobě myslí, že "počítačům rozumí", a vypínají si javascript) to samozřejmě nebude fungovat, ale v 99% případů ano, tím se nemá až tak cenu zabývat.

Pokud tuto akci budete dělat v C# nebo VB.NET, bude se provádět na serveru. Tedy tlačítko odešle celou stránku na server, server v ní změní jeden maličký detail a odešle ji zase zpět. To se hodí jak kdy. Pokud mám ve stránce jeden takovýto prvek, např. něco vyberu v seznamu a kus stránky se musí aktualizovat, je to v pohodě. Ale zkuste si dát pokročilé vyhledávánínotebooků na Alza.cz, tam je tisíc zaškrtávátek a každé odesílá stránku na server. Mám tady 100MBs přítup na Internet, ale Alza má pomalé servery, takže je to ílené a nedá se to používat, po každém zatržení políčka musíte 2 sekundy čekat.

Dá se to řešit ješte pomocí technologie Ajax - tlačítko pomocí javascriptu vystaví speciální požadavek na server (stránka zůstane v prohlížeči stále načtená, "neodesílá se celá") a server vrátí jen ten kousek, který se změnil (pošle tedy jen aktualizovaný TextBox). V ASP.NET se to dělá relativně jednoduše, nemusíte ani Javascript umět, vygeneruje ho to samo.

Takže příště, až budete někomu radit, je potřeba zvážit, jestli je rozumné na jistých místech používat prostředky ASP.NET, které nám sice šetří práci, ale mají jisté nevýhody (většinou to nevadí, v některých případech ale bohužel ano), jestli zkrátka není vhodné použít starý dobrý Javascript, HTML a CSS. Je nutné si uvědomit, že ASP.NET tyto technologie nenahrazuje, nejde proti těmto technologiím. ASP.NET je na nich de facto postavené - generuje HTML, CSS a javascripty tak, aby stránka fungovala. To, že jsou na tomto webu tutoriály s ASP.NET v názvu ještě neznamená, že řešit věci jinak je špatně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vážený pane Herceg,

děkuji za velmi rozsáhlé pojednání o client-side a server-side spracování požadavku (toto není ironie, i když to tak může vyznít).

Bohužel/bohudík jsem několik let psal webové aplikace v PHP, takže jsem si zvykl na to, že si (X)HTML výstup můžu v podstatě definovat do posledního detailu, včetně ID elementu, které následně spracovává JavaScript. Nyní se snažím přejít na ASP.NET, zatím docela úspěšně, až na pár výjimek.

Psal jste, že si to ASP.NET vygeneruje samo. Existuje na to tedy nástroj, jak mu definovat, co má přesně udělat? Tak ,abych nemusel celou stránku odesílat na server a zpět? Mohl byste prosím nastínit nějak postup, nechci žádné detailní step-by-step návody, stačí pouze nasměrovat.

Předem děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Abych zde jen neustále neříkal něco teoretického, tak zde je názorný příklad.

Mám FormView, kde mám v InsertTemplate tyto dva prvky:

<input type="button" value="B" onclick="PrihodBold();" /><br />
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("text") %>' width="476px" CausesValidation="True" Height="178px" TextMode="MultiLine" />

Pomocí nápovědy jsem si našel něco ohledně ClientScriptManageru, kde byl i tento vzorový příklad:

        Dim cs As ClientScriptManager = Page.ClientScript

        Dim scriptText As String = "<script type=""text/javascript"">" & vbCr
        scriptText &= "function PrihodBold() {" & vbCr
        scriptText &= vbTab & "var tb3 = document.getElementById(""TextBox3"");" & vbCr
        scriptText &= vbTab & "tb3.value += ""New value"";" & vbCr
        scriptText &= "}" & vbCr
        scriptText &= "</script>"
        cs.RegisterClientScriptBlock(Me.GetType(), "AddScripts", scriptText, False)

Bohužel, příklad nefunguje z jednoduchého důvodu, protože JavaScript se vypíše tak, jak jsem ho napsal, ale prvek textarea má ID, které mu vygeneroval ASP.NET. A mě se jedná o to, jestli je ASP.NET schopno nějak při generování JavaSkriptu schopen nahradit ten text "TextBox3" za ID, které přiřadí TextBoxu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ID komponenty ve stránce zjistíte přes TextBox3.ClientID.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A ještě něco.

Lepší by asi bylo použití StringBuilderu:

Dim cs As ClientScriptManager = Page.ClientScript

Dim strbui As New System.Text.StringBuilder()
strbui.Append("function PrihodBold() {" & vbCr)
strbui.Append("var tb3 = document.getElementById(""TextBox3"");" & vbCr)
strbui.Append("tb3.value += ""New value"";" & vbCr)
strbui.Append("}" & vbCr)
strbui.Append("</script>")

cs.RegisterClientScriptBlock(Me.GetType(), "AddScripts", strbui.ToString, False)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

to byl pouze příklad, samozřejmě, že výsledný kód bude úplně jiný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback