ASCX a style   zodpovězená otázka

ASP.NET WebForms

Dobrý den,

vytvořil jsem komponentu ascx, ale nevím si rady se zakomponováním stylů do této komponenty.

Potřebuji, abych po vložení komponenty do stránky aspx mohl nastavit komponentě např. absolutní pozici a posunout ji na souřadnice.

Toto nemůžu rozchodit:

<uc1:Value_label ID="Value_label1" runat="server" Unit="m3" 
        ForeColor="Lime" style="left: 100px; position: absolute; top: 200px" />

Jednou z možností je vložit tuto komponentu do "div" a styl nastavit pro tento div. Mě ale zajímá zda jde komponentu "naučit" používat styly.

Díky Libor

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

Tak, jak to máte napsané, by komponenta styly mít měla, za předpokladu, že jste nepřepisoval její metody Render.

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

Tak nevím, asi dělám někde chybu. Zkusil jsem teď jen narychlo udělat komponentu ascx s jedním Label a jednou vlastností Text, bez zásahu do metody Render a styly mi taky nebere po zavedení do aspx stránky viz:

<%@ Control Language="VB" ClassName="Lab_pok" %>
<%@ Import Namespace="System.ComponentModel" %>

<script runat="server">
    <Description(""), Category("Appearance")> Property Text() As String
        Get
            Return Label1.Text
        End Get
        Set(ByVal _Value As String)
            Label1.Text = _Value
        End Set
    End Property
</script>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

Zkusil jsem přidat do komponenty toto:

    <Description(""), Category("Style")> Property style() As String 
        Get
            Return Label1.Style.Value
        End Get
        Set(ByVal _Value As String)             Label1.Style.Value = _Value
        End Set
    End Property

Styl jde zadávat, a funguje po spuštění stránky aspx. Jenomže v desing módu aspx stránky s komponentou stejně nelze hýbat. V desing módu v menu Format - > Position je pro mou komponentu tato volba mrtvá.

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

Tu vlastnost style by komponenty měly mít automaticky, pokud jí tam přidáte, tak to nebude fungovat, protože přepíšete tu původní.

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

Tak potom nechápu, když ji tam nepřidám, proč tam tedy automaticky není :-(

Nebo je to omezení Microsoft Visual Web Developer 2008 Express Edition?

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

Omezení Web Developeru to není. Záleží, jestli vaše komponenta dědí z UserControl nebo z WebControl. Pokud je to ASCX, tak pravděpodobně dědí z UserControl, což by ale mělo jít změnit. WebControl má vlastnost Style, což je asi to, co chcete. Naimplementovat vlastnost Style do UserControl je trochu obtížnější.

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

Ano, komponenta dědí z UserControl. Tak v tom je zcela určitě problém. Bohužel se mi nedaří jen to tak zlehka přepsat na WebControl. Nevíte o nějakém jednoduchém příkladu?

Děkuji.

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

Mám dojem, že se to dělá tak, že do direktivy Control v komponentě přidáte Inherits="System.Web.UI.WebControls.WebControl".

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

To mě napadlo taky, ale bez úspěchu.

Chybová zpráva analýzy: Třída System.Web.UI.WebControls.WebControl zde není povolena, protože nerozšiřuje třídu System.Web.UI.UserControl.

Začínám smiřovat s tím, že je to u Web User Control komponent neproveditelné.

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

Tak jsem zjišťoval a opravdu to nejde - ASCX pro tento účel nelze použít, musíte si vytvořit normální třídu a podědit ji z WebControl. Pak přepsat nějaké metody, které vygenerují vnitřní komponenty a vyrenderují obsah.

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

Každopádně děkuji za konzultaci. Jak je vidět, má Microsoft stále co vylepšovat :-)

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

Ono to možná ale ani není cílem, aby WebControl šly dělat jako ASCX. Většina komponent se píše jako samotná třída a komponenty a obsah si generuje kódem. ASCX je problém i zkompilovat do DLLky.

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

Těžko říct, jak to tvůrci Microsoftu mysleli. Každopádně by šlo udělat komponentu typu Web Custom Control, která automaticky dědí z WebControls, zkompilovat ji jako DLLku a nainstalovat na server. Jenomže to se dostávám od jednoduchého a rychlého řešení někam kam jsem nechtěl. Nehledě na to, že jsem momentálně omezen na použití Visual Web Developer 2008 Express, kde podpora těchto komponent je omezena. Samozřejmě vše se dá obejít.

Já jsem potřeboval rychlé řešení, tak jsem nakonec komponenty ascx nastrkal do DIV a rozmístil kam potřebuji. Není to příliš elegantní řešení, ale funkční a pro mě v časovém presu nejrychlejší.

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