webForumDet fria alternativet

Syntax i <script>

21 svar · 430 visningar · startad av cyprys

cyprysMedlem sedan dec. 20003 563 inlägg
#1

Är lite ny på syntaxen i .net och undrar hur man kan göra för att skriva ut html i en sub (som nu måste läggas inom <script> vad jag fattat) utan att behöva använda response.write hela tiden.
I asp funkade i alla fall:

<%
sub subben()
%>
<html>
<%
end sub
%>

Finns det något enkelt som jag missat? :)

renholmMedlem sedan apr. 20012 266 inlägg
#2

Hum, ett litet tips, försök inte göra saker som du gjort i ASP på samma sätt i ASP.NET, det är väldigt mycket som skilljer sig mellan de olika versionerna, mitt förslag är att du kikar igenom sidorna som står bland relaterat länkarna. Finns bra information om hur man bör göra saker där. Lycka till!

cyprysMedlem sedan dec. 20003 563 inlägg
#3

Ok. Jag har nyligen lyft min första bok inom området och jag har hittat en stor del andra metoder att lösa problem på. Men om vi ser på just denna sak där jag ska inkludera den vanliga HTML-koden ifrån en includefil. Vad skulle det finnas för revolutionera sätt att skriva ut den på?
Och frågan var inte ställd sarkastisk :) , utan av nyfikenhet av att lära mig. :D

PatrikBMedlem sedan mars 20002 836 inlägg
#4

tex, att du inte behöver include-filer längre ;)

Att "templata" en sida är no problems med dotNET jämfört med asp.

OBS!! ett mycket simpelt exempel. Kan byggas mycket mer avancerat ;)

<%@ Page Language="VB" %>
<script runat="server">

    Private Sub Page_Load(sender As Object, e As EventArgs)
   
        '## -- ladda menyn i vänster tabell kolumn --
        Dim _leftcol As Control = Page.FindControl("leftcol")
        If (Not _leftcol Is Nothing) Then
            _leftcol.Controls.Add(New LiteralControl("MinMeny"))
        End If
    
        '## -- ladda sidinnehållet i tabellens mittkolumn --
        '## -- denna kontrol kan även vara en DataGrid, DataList
        '##    eller vilken annan kontroll du vill --
        Dim _siteContent As Control = Page.FindControl("content")
        If (Not _siteContent Is Nothing) Then
            _siteContent.Controls.Add(New LiteralControl("Mitt innehåll"))
        End If
    
        '## -- ladda övrigt, små annonser, eller vad du nu vill --
        Dim _banners As Control = Page.FindControl("myBanners.ascx")
        Dim _rightcol As Control = FindControl("rightcol")
        If (Not _rightcol Is Nothing) Then
            _rightcol.Controls.Add(New LiteralControl("Mina annonsörer"))
        End If
    
        '## -- om det nu tex inte finns något innehåll för att visa några
        '##    annonser kan vi gömma högerkolumnen --
        '_rightcol.Visibel = False

    End Sub

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <table cellspacing="0" cellpadding="0" width="100%" border="0">
            <tbody>
                <tr>
                    <td id="leftcol" runat="server">
                        här kan en menu placeras</td>
                    <td id="content" runat="server">
                        här placerar jag sid innehållet</td>
                    <td id="rightcol" runat="server">
                        övriga små flashar kan placeras här</td>
                </tr>
            </tbody>
        </table>
    </form>
</body>
</html>

cya,
PatrikB

cyprysMedlem sedan dec. 20003 563 inlägg
#5

Page.FindControl("myFooter.ascx")

Hmm. Jag får inte just den delen att funka samt att jag inte hittar info om den i någon bok eller över nätet. Felmeddelande hänvisar till att filen ger ett nullvärde.

Exception Details: System.ArgumentNullException: Value cannot be null. Parameter name: child

Dim menu as Control = Page.FindControl("menu.aspx")
8: leftmenu.controls.Add(menu)

PatrikBMedlem sedan mars 20002 836 inlägg
#6

oopzzzz,
gick av bara farten .... ska ju vara LoadControl för ascx filerna :r

ändrar i mitt inlägg ovan så kan du testa igen.
annars kan du gå till https://www.asp.net och kika in deras portal som de har för nedladdning och kika på deras kod. De använder denna typ av templating.

cya,
PatrikB

cyprysMedlem sedan dec. 20003 563 inlägg
#7

ok. Var inne där men tittade lite bland deras tutorilas :)
Tackar

PatrikBMedlem sedan mars 20002 836 inlägg
#8

ändrat i koden ovan lite granna, men du ser att du kan lägga till vilken control som helst, dynamiskt, tex en datagrid, en datalist, eller vad du nu vill lägga till.

Exemplet som jag ändrade lägger endast till lite text i varje kolumn i tabellen.

cya,
PatrikB

cyprysMedlem sedan dec. 20003 563 inlägg
#9

Utgår det där exemplet att man bara använder en sida i webbläsaren (index.aspx) som bara byter ut sökvägarna inom kontrollerna?

[r]Dags att börja tänka om helt om allt man gjort tidigare[/r]

PatrikBMedlem sedan mars 20002 836 inlägg
#10

jepp, sedan hakar man på en querystrings tex för att kunna kontroller vart man är någonstans.

Men, detta är bara ETT sätt att utföra templating på.
Fördelen med detta sätt som jag ser det är att jag som programmerare kan jobba "helt skild" från min designer och designer jobbar på precis som vanligt med sina "mock ups" endast med ett par tillägg för asp.net, som id och runat="server" där olika saker ska visas och själva deklarationen av vilken fil som är cb.dll'en.

cya,
PatrikB

cyprysMedlem sedan dec. 20003 563 inlägg
#11

Nu när man ändå är i farten.
När jag nu kör på den metoden med ascx-filer. Hur styr man innehåll i de filerna fårn index.aspx?
Man man sätta en variabel i index.aspx som sedan gäller även i ascx-filerna?

cyprysMedlem sedan dec. 20003 563 inlägg
#12

Alltså. Tanken jag vill genomföra är att t.ex. öppna databasen i index.aspx och sedan kunna komma åt den i nästa fil med som jag öppnar såhär. Går det att ärva ner eller hämta från index-filen vissa variabler?

PatrikBMedlem sedan mars 20002 836 inlägg
#13

Du kan skapa properties i din ascx fil så du an "passa in" saker från aspx sidan.

Snabb exempel i VB.NET

top.aspcx
=======

<%@ Control Language="VB" %>
<script runat="server">

    Public MyProperty As String
    
    Public Sub Page_Load(sender As Object, e As EventArgs)
        lblContent.Text = MyProperty
    End Sub

</script>
<asp:Label id="lblContent" runat="server">Min property contains: </asp:Label>

filen som vi "inkluderar ascx filen i"

test.aspx
=======

<%@ Page Language="VB" %>
<%@ Register TagPrefix="Site" TagName="Top" src="top.ascx" %>
<script runat="server">
    Public Sub Page_Load(sender As Object, e As EventArgs)
        Dim _temp As String = "Detta ska visas på ascx-filen."
        header.MyProperty = _temp
    End Sub
</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <Site:Top id="header" runat="server"></Site:Top>
    </form>
</body>
</html>

Fast, jag rekomenderar dig att gå igenom koden för deras portal. Du lär dig en hel del på det, om du går igenom tills du förstår koden, vad som händer, när det händer och varför det händer m.m

cya,
PatrikB

PatrikBMedlem sedan mars 20002 836 inlägg
#14

he, he ... förresten, nu när jag läser din fråga igen ... tror att jag missuppfattade den :r

Att göra templating på detta sätt bör man tex koda olika delar som moduler, typ menyn, nyheter, gästböcker, forum, m.m, m.m.

Allt lagrat i datbasen, eller rättare sagt, grundinfo om de olika modulerna som sökväg till ascx-filen, under vilken meny som den ska visas m.m.

denna applikation blir rätt komplex och svår att förklara in i minsta detalj hur man gör.

Det bästa är om du går igenom koden från IBuySpy Portal för att få ideer om hur man kan göra.

Finns även en mycket lång tråd på https://www.asp.net forumet angående Tempalting (Architecture forumet).
En del förespråkar "korrekt OOP" för templating i den tråden. Nackdelen med den som jag ser det är att Designern inte får någon kontroll alls över hur siten ska se ut. Fungerar dock mycket bra för enklare siter med en 3-kolumners design med header och en footer.

cya,
PatrikB

NETworkMedlem sedan juni 20011 732 inlägg
#15

Först och främst ska du som sagt glömma bort gamla ASP helt och hållet. Du ska överhuvudtaget inte använda samma approach som du gjort tidigare, asp har inte ett jota gemensamt med asp.net. Med detta som utgångspunkt blir det lättare att sätta tänderna i .net. :)

För att svara på din fråga. Tänk OO, alltså objektorienterat! En pagelet/usercontrol (alltså en template som du kallade dem) är en klass. I din usercontrol har du exakt samma möjligheter att bygga upp din logik som i din huvudsida, antingen oberoende av varandra eller tillsammans där du har kommunikation mellan dessa. Kommunikationen mellan din usercontrol och din huvudsida kan ske på ett flertal olika sätt, exempelvis genom accessors. Men om du är helt ny på asp.net och inte har någon större erfarenhet av oo-programmering så föreslår jag att du först börjar med att bygga upp självständiga oberoende usercontrols och löär dig hur de fungerar.

Här finns lite nyttig läsning och kodexempel om detta:
http://samples.gotdotnet.com/quickstart/aspplus/doc/webpagelets.aspx

cyprysMedlem sedan dec. 20003 563 inlägg
#16

Metwork: Jag har precis börjat följa ditt råd nästan till punkt och pricka. Har redan skapat en hel del sidor bara för att se hur det funkar.
Jag tackar för hjälpen. Jag kommer att återkomma när jag har lite mer kött på benen :)

PMedlem sedan jan. 20012 204 inlägg
#17

hmm fungerar det här lätt att göra i webmatrix?

PatrikBMedlem sedan mars 20002 836 inlägg
#18

Funkar utmärkt i WebMatrix.

cya,
PatrikB

PMedlem sedan jan. 20012 204 inlägg
#19

hmm går ju inte att göra .dller och klasser osv är ju inte lätt att få att fungera!

PatrikBMedlem sedan mars 20002 836 inlägg
#20

du måste kompilera dina egna dll'er med vbc.exe (om du använder vb.net)
Tyvärr finns det inte inbyggt i WebMatrix att kompilera dem.

ex på en bat-fil för att kompileara din egna dll för vb.net:

mk.bat
=====

vbc /t:library /out:myDll.dll myDll.vb /r:System.dll

läs på om hur vbc.exe funkar i SDKn

cya,
PatrikB

133 ms totalt · 3 externa anrop · v20260731065814-full.b943c234
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)