[ nristic @ 23.11.2003. 00:00 ] @
Imam jedan problem.
Imam jednu aspx stranicu, ascx user kontrolu i vb klasu.

U vb klasi imam varijablu definiranu ovako
Public strtitle as string
Uglavnom u kodu ta varijabla se mjenja prema linku na koji je
korisnik kliknuo.Sada tu varijablu stavljam u aspx stranicu
ovako.

<title><% =strporuka %></title>

Znači želim da mi u title piše ta poruka.

Dobijem sljedeću grešku : Name 'strtitle' is not declared
Čim maknem ono iz title taga sve ostalo radi.

[ ZokiR @ 24.11.2003. 03:30 ] @
Jedan od načina da se ovo uradi je da staviš literal kontrolu u title:

Code:
<title><asp:literal id="myPageTitle" runat="server"/></title>


Kontrolu takođe treba deklarisati u "code-behind" fajlu:

Code:
Public myPageTitle As System.Web.UI.WebControls.Literal


Onda naslov menjaš po potrebi sa

Code:
myPageTitle.Text = "Moje ime je..."

[ nristic @ 24.11.2003. 20:25 ] @
Hvala na odgovoru ali nije uspjelo.Javlja grešku:
Object reference not set to instance of object.

Stvarno ne kužim u čemu je problem.
Ako npr u title tag stavim
<%= Request("ime_parametra") %>
onda pročita vrijednost iz query stringa ali ako stavim bilo varijablu ili
literal kontrolu javlja grešku.



[ ZokiR @ 25.11.2003. 13:15 ] @
Ne znam u cemu bi mogao biti problem, možda nešto u vezi sa tom ascx user kontrolom? Kod mene u VS.NET 2003 sledeci trivijalni primer radi bez greške:

TitleTest.aspx
Code:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="TitleTest.aspx.vb" Inherits="TitleTest2.TitleTest"%>
<HTML>
    <HEAD>
        <title><%=myPageTitle%></title>
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <asp:TextBox id="titleTextBox" runat="server"></asp:TextBox>
            <asp:Button id="setTitleButton" runat="server" Text="Set Title"></asp:Button>
        </form>
     </body>
</HTML>


TitleTest.aspx.vb
Code:
Public Class TitleTest
    Inherits System.Web.UI.Page

    Protected myPageTitle As String
    Protected WithEvents titleTextBox As System.Web.UI.WebControls.TextBox
    Protected WithEvents setTitleButton As System.Web.UI.WebControls.Button

    Private Sub setTitleButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles setTitleButton.Click
        myPageTitle = titleTextBox.Text
    End Sub

End Class

[ Shadowed @ 25.11.2003. 15:28 ] @
Citat:
ZokiR:
Code:
Public myPageTitle As System.Web.UI.WebControls.Literal


Nemam VS pa ne mogu da proveravam ali zar ovo ne bi trebalo da bude
Code:
Public myPageTitle As New System.Web.UI.WebControls.Literal
[ nristic @ 26.11.2003. 17:12 ] @
Vjerojatno si u pravu da je problem sa user kontrolom.
Ovaj primjer koji si ti dao 100 % radi.

Ali problem kod mene je što user kontrola nasljeđuje iz code behinda a u aspx stranici
se registriraju pomoću register direktive.

Znači ovako nešto
.aspx
<%@ Register Tagname="acme" Tagprefix="aspx" src=kontrole/default.ascx" %>
...<title><% = strtitle %>

.ascx
<%@ Control Inherits="ime_Klase" src="default.ascx.vb" %>
.. tu se nalaze sve kontrole.

.ascx.vb
Public class ime_klase : Inherits UserControl
Public strtitle as String
... kod
End Class
[ ZokiR @ 27.11.2003. 10:37 ] @
Ok, sad shvatam šta se događa. strtitle je promenljiva u user kontroli, i zato se ne vidi na aspx stranici direktno. Treba da prefiksiraš ID user kontrole ispred imena varijable... znači, ako u aspx fajlu stoji

Code:
<acme:AcmeUserControl id="myUserControl" runat="server"></acme:AcmeUserControl>


onda se strtitle-u pristupa ovako:

Code:
<title><% = myUserControl.strtitle %></title>


Uzgred, moj prvi primer sa literal kontrolom nije radio jer mu je nedostajala ključna reč New u deklaraciji, kao što je Shadowed ispravno primetio. (tako je to kada pokušavam da prevedem kôd iz C# u VB napamet )
[ nristic @ 27.11.2003. 16:12 ] @
Ma krivo si shvatio.Promjenjiva varijabla strtitle
je definirana u vb klasi.

Rješio sam problem.Varijabla treba biti def. ovako
Public shared strtitle as string
i u title tag se upisati ovako
<% = ime_klase.strtitle %> gdje je ime_klase klasa
u kojoj je def. varijabla strtitle.

Hvala puno svima na pomoći.
[ ZokiR @ 28.11.2003. 01:39 ] @
Citat:
nristic:
Ma krivo si shvatio.Promjenjiva varijabla strtitle je definirana u vb klasi.

Jeste bila definisana u klasi, ali nije bila klasna promenljiva dok joj nisi dodao ono Shared , a ako nije Shared onda se mora staviti ime instance kao prefiks (u ovom slučaju to je ID user kontrole). Da li je promenjiva Shared ili nije već zavisi od toga šta hoćeš da postigneš, ali ako ti ovo radi kako treba, nema problema.