| 

.NET C# Java Javascript Exception

2
Hallo, ich bin neu in der ASP.NET-Welt und habe da eine Frage:

Ich habe eine Seite in meinem Webforms-Projekt, mit einer Code-Behind-Datei (Test.aspx + Test.aspx.vb).

Auf dieser Test-Seite befindet sich eine DropDownList mit verschiedenen Farben als Inhalt. Wählt man eine Farbe, dann wird die Auswahl in einem Label unterhalt der DDL ausgegeben. Ich möchte beim auslösen des IndexChange-Events nicht die komplette Seite laden + der Back-Button im Webbrowser soll funktionieren, so das ich zur letzten ausgewählten Farbe gehen kann.

Ich habe das Beispiel von dieser Seite versucht nachzumachen:
http://ajax.net-tutorials.com/controls/updatepanel-history/

Der Unterschied ist, dass ich den ScriptManager in meiner MasterPage habe. Deshalb habe ich, um auf das Label zuzugreifen, das Label aus der Test.aspx-Datei öffentlich gemacht.

Ich habe also in der Master.Site eine Instanz davon und versuche dann auf das Label in der Test.aspx-Datei zuzugreifen.

Folgendes habe ich als Code:

Test.aspx:
<div style="height: 150px">
<br />
<asp:UpdatePanel runat="server" ID="pnlColorSelect">
<ContentTemplate>

<asp:DropDownList runat="server" ID="DropDownList1" AutoPostBack="true">
<asp:ListItem Value="Red">Rot</asp:ListItem>
<asp:ListItem Value="Blue">Blau</asp:ListItem>
<asp:ListItem Value="Green">Grün</asp:ListItem>
<asp:ListItem Value="Gold">Gold</asp:ListItem>

</asp:DropDownList>
<br />
<br />
Selected color: <asp:Label runat="server" ID="lblSelectedColor" />
</ContentTemplate>
</asp:UpdatePanel>


</div>


Test.aspx.vb:
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged

lblSelectedColor.Text = DropDownList1.SelectedValue
lblSelectedColor.BackColor = System.Drawing.Color.FromName(DropDownList1.SelectedValue)

System.Web.UI.ScriptManager.GetCurrent(Me.Page).AddHistoryPoint("SelectedColor", DropDownList1.SelectedValue)

End Sub


Und

Public Property label As Label
Get
Return lblSelectedColor
End Get
Set(ByVal value As Label)
lblSelectedColor = value
End Set
End Property


In meiner MasterPage Site.Master.aspx habe ich den ScriptManager folgendermaßen:

<asp:ScriptManager runat="server" ID="MainScriptManager" EnableHistory="true" OnNavigate="MainScriptManager_Navigate" EnableSecureHistoryState="false">
<Scripts>
<%--To learn more about bundling scripts in ScriptManager see https://go.microsoft.com/fwlink/?LinkID=301884 --%>
<%--Framework Scripts--%>
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="bootstrap" />
<asp:ScriptReference Name="respond" />
<asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
<asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
<asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
<asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
<asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
<asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
<asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
<asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
<asp:ScriptReference Name="WebFormsBundle" />
<%--Site Scripts--%>
</Scripts>
</asp:ScriptManager>


Und die Code-Behind-Datei für meine MasterPage:
Protected Sub MainScriptManager_Navigate(sender As Object, e As HistoryEventArgs)
Dim color As String = e.State("SelectedColor")
If Not (String.IsNullOrEmpty(color)) Then
Dim test As Test

test.label.Text = color
test.label.BackColor = System.Drawing.Color.FromName(color)


End If
End Sub


Leider ist meine Test-Instanz immer Nothing, wenn ich auf den zurück-Button im Browser gehe.

Lange Rede kurzer Sinn, wie setze ich das ganze um, wenn ich den ScriptManager in einer MasterPage habe?
News:
27.06.2017
1 Antwort
0
Okay vermutlich war die Instanz von meiner Test-Klasse deshalb Nothing bzw. Null, da nach jeden Request an den Server alle Instanzen vernichtet werden aber gilt das auch, wenn man mit Ajax arbeitet?

Bleibt halt immer noch die Frage, wie man es nun richtig macht? Brauch ich da vllt dieses "ViewState"?
27.06.2017

Stelle deine --Frage jetzt!