PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASP .NET Problem


tomtom
2006-03-29, 19:08:00
Hi Leute,

Ich hab ein Problem...ich muss heute Abend noch ein kleines ASP .NET Programm fertig kriegen. Die Komplexität der Funktionalität lasst mal bitte außen vor ;)! Es geht um folgendes: Das ganze soll ein kleiner Rechner werden/sein dem man zwei Werte übergeben kann (value1 und value2) Über diese Werte soll man dann die 4 Grundrechnungsarten berechnen können. Die Werte (Eingaben sowie auch das Ergebnis) sollen in einer Session gespeichert werden:

Session("result") = Ergebnis
Session("value1") = eingegebener Wert1
Session("value2") = eingegebener Wert2

Folgende Probleme hab ich: Wie lese ich RadioButtons richtig aus, sodass ich dass der Methode doCalc übergeben kann? Krieg da immer nur "txtType is not declared". Des Weiteren weiß ich nicht mal, ob das mit der Session alles richtig ist, bin nämlich nicht in der Lage da irgendwas zu berechnen...

Muss dazu sagen, dass ich noch nie was mit ASP .NET machen musste und das nur ein kleiner Ausflug dahin sein sollte - wär super wenn mir schnell wer helfen könnte. Kann natürlich sein, dass ich kompletten Crap "programmiert" hab (ich geh ehrlich gesagt auch davon aus^^)...aber wär echt toll, wenn das heute noch hinhauen würde!

Hier mal der Code:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<script runat="server">

Sub Session_Start(ByVal Sender As Object, ByVal E As EventArgs)
Session("result") = 0
Session("value1") = txtValue1.Value
Session("value2") = txtValue2.Value
'Session.Item("result").ToString
End Sub

Sub Page_Load(ByVal Sender As Object, _
ByVal E As EventArgs)
If IsPostBack Then
Session("value1") = txtValue1.Value
Session("value2") = txtValue2.Value
doCalc(Session("value1"), Session("value2"), txtType.Value)
End If
End Sub

Function checkInput(ByRef value1 As Double, ByRef value2 As Double) As Boolean
If value1 <> 0 And value2 <> 0 Then
checkInput = True
Else
checkInput = False
End If
End Function

Sub add(ByVal value1 As Double, ByVal value2 As Double)
Dim result As Double
result = value1 + value2
Session("result") = result
Session("value1") = value1
Session("value2") = value2
End Sub

Sub subtract(ByVal value1 As Double, ByVal value2 As Double)
Dim result As Double
result = value1 - value2
Session("result") = result
Session("value1") = value1
Session("value2") = value2
End Sub

Sub mul(ByVal value1 As Double, ByVal value2 As Double)
Dim result As Double
result = value1 * value2
Session("result") = result
Session("value1") = value1
Session("value2") = value2
End Sub

Sub div(ByVal value1 As Double, ByVal value2 As Double)
Dim result As Double
If value2 > 0 Then result = value1 / value2
Session("result") = result
Session("value1") = value1
Session("value2") = value2
End Sub

Sub doCalc(ByVal value1 As Double, ByVal value2 As Double, ByVal type As String)
If checkInput(value1, value2) = True Then
Select Case (type)
Case "type1" : add(value1, value2)
Case "type2" : subtract(value1, value2)
Case "type3" : mul(value1, value2)
Case "type4" : div(value1, value2)
End Select

txtValue1.Value = Session("value1")
txtValue2.Value = Session("value2")
txtResult.Text = Session("result")

End If
End Sub

</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<link rel="stylesheet" type="text/css" href="style.css" />
<title>Grundlagen der Diplomarbeit: Rechner - ASP .NET</title>
</head>
<body>
<div class="outborder">
<div class="display">
<asp:Label id="txtResult" Text="0" runat="server"/>
</div>
<form action="Default.aspx" method="post" id="form1" runat="server">
<div class="value1">
<input class="value" type="text" runat="server" id="txtValue1" value="0" />
</div>
<div class="value2">
<input class="value" type="text" runat="server" id="txtValue2" value="0" />
</div>
<div class="options">
<table>
<tr>
<td><asp:RadioButton id="type1" Checked="true" GroupName="txtType" Text="Addieren" runat="server"/></td>
</tr>
<tr>
<td><asp:RadioButton id="type2" Checked="false" GroupName="txtType" Text="Subtrahieren" runat="server"/></td>
</tr>
<tr>
<td><asp:RadioButton id="type3" Checked="false" GroupName="txtType" Text="Multiplizieren" runat="server"/></td>
</tr>
<tr>
<td><asp:RadioButton id="type4" Checked="false" GroupName="txtType" Text="Dividieren" runat="server"/></td>
</tr>
</table>
</div>
<div class="options2">
<table>
<tr>
<td><input class="optionsbutton" runat="server" type="submit" value="=" /></td>
</tr>
</table>
</div>
</form>
</div>

</body>
</html>


Big thx im Voraus!
lg, t2k3

Kabelsalat
2006-03-29, 19:19:51
Die Fehlermeldung ist korrekt, da es kein Element / Objekt mit der ID "txtType" gibt. Die Angabe von Groupname sorgt lediglich dafür, dass Elemente ein und der selben Gruppe nicht gleichzeitig ausgewählt sind. Wenn du die einzelnen RadioButtons zusammenfassen willst, solltest du in der MSDN-Library mal nach RadioButtonList suchen - das sollte der gewünschten Funktion entsprechen. Der Zugriff erfolgt dann über die Eigenschaften SelectedIndex, SelectedItem und / oder SelectedValue.

tomtom
2006-03-29, 19:32:11
Okay danke...ich schau mir das mal eben an ;)

Wie siehts mit den Sessionvariablen aus? Kann ich die so verarbeiten? Und hab ich die Funktionen/Methoden richtig geschrieben, sodass Page_Load wirklich beim Seitenaufruf gestartet wird?

Danke, Mfg :)

grakaman
2006-03-29, 19:43:38
Okay danke...ich schau mir das mal eben an ;)

Wie siehts mit den Sessionvariablen aus? Kann ich die so verarbeiten? Und hab ich die Funktionen/Methoden richtig geschrieben, sodass Page_Load wirklich beim Seitenaufruf gestartet wird?

Danke, Mfg :)

Afaik nein, denn deine Webform verweist ja schon auf eine Codebehind Datei. Ich bin mir jetzt nicht sicher, aber IMO macht dann ASP.NET keine automatische Bindung der Ereignisse. Ist auch ziemlich crappig, dass per Inline in die Webform zu hauen.

tomtom
2006-03-29, 19:48:00
Afaik nein, denn deine Webform verweist ja schon auf eine Codebehind Datei. Ich bin mir jetzt nicht sicher, aber IMO macht dann ASP.NET keine automatische Bindung der Ereignisse. Ist auch ziemlich crappig, dass per Inline in die Webform zu hauen.

Nur leider hab ich keinen Plan wie ich das so einfach wie möglich machen kann, sodass es auch funktioniert...bin mit meinem Latein am Ende - bin nämlich echt kompletter Anfänger in ASP .NET und muss das leider heut noch fertig machen :/

grakaman
2006-03-29, 20:17:55
Nur leider hab ich keinen Plan wie ich das so einfach wie möglich machen kann, sodass es auch funktioniert...bin mit meinem Latein am Ende - bin nämlich echt kompletter Anfänger in ASP .NET und muss das leider heut noch fertig machen :/

Verwendest du VS.NET?

tomtom
2006-03-29, 20:23:58
Jop, 2005 Beta 2

Kabelsalat
2006-03-29, 21:03:52
Ich würde an deiner Stelle eher auf die Express-Versionen zurückgreifen, da du als Anfänger so oder so keinen Vorteil durch die Zusatz-Möglichkeiten einer Standard- oder Professional-Version hast.

Btw.: Deine Eventhandler werden nicht funktionieren, da du weder AutoEventWireup auf true gesetzt hast, noch Ereignisbehandlungsroutinen explizit deklarierst.


PS: Folgendes Galileo Open Book könnte dir wahrscheinlich weiterhelfen: http://www.galileocomputing.de/openbook/asp/index.htm - ist zwar noch für .Net 1, aber an den Grundlagen hat sich schließlich (kaum) etwas geändert...

grakaman
2006-03-29, 21:11:27
Also ich habe das mal schnell mit der RadioButtonList gemacht, wie das Kabelsalat vorgeschlagen hat. Damit kannst du das prima herausfinden. Hier mal etwas Code, den Rest kannst du dann sicher selbst hinzufügen:

WebForm:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:RadioButtonList ID="RadioButtonList1" runat="server" Style="z-index: 100; left: 182px;
position: absolute; top: 117px">
<asp:ListItem Value="+">Add</asp:ListItem>
<asp:ListItem Value="-">Substract</asp:ListItem>
<asp:ListItem Value="/">Divide</asp:ListItem>
<asp:ListItem Value="*">Multiply</asp:ListItem>
</asp:RadioButtonList>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Style="z-index: 101;
left: 328px; position: absolute; top: 260px" Text="Button" />
<asp:Label ID="Label1" runat="server" Style="z-index: 103; left: 394px; position: absolute;
top: 197px" Width="139px"></asp:Label>

</div>
</form>
</body>
</html>

Codebehind:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
this.Label1.Text = this.RadioButtonList1.SelectedValue;
}
}



Wie ich gerade herausgefunden habe, braucht man bei ASP.NET 2.0 keine Ereignisse mehr in der Codebehind verknüpfen. Was macht man denn jetzt, wenn man mehrere EventHandler auf ein Ereignis aufrufen will?

Kabelsalat
2006-03-29, 21:16:17
Wie ich gerade herausgefunden habe, braucht man bei ASP.NET 2.0 keine Ereignisse mehr in der Codebehind verknüpfen. Was macht man denn jetzt, wenn man mehrere EventHandler auf ein Ereignis aufrufen will?

Weiterhin explizit EvenHandler deklarieren...

tomtom
2006-03-30, 21:43:41
Danke Leute ;) Werd mir das dann morgen mal näher anschauen (bin atm am Mathebüffeln ;( )

MfG

tomtom
2006-04-05, 16:52:33
Hallo Leute,

melde mich mal eben zurück ;)

Hab das Ganze jetzt mal ausprobiert, scheint bisher zu funktionieren. Allerdings hab ich jetzt noch 2 Fragen:

Wie lese ich eine Sessionvariable aus? Den Wert hab ich mit Session.Add("value1",value1); reingeschrieben - doch der Wert lässt sich nicht mit Session["value1"] auslesen :/
double-Wert in String umwandeln: geht das nicht mit doublewert.ToString? Funktioniert nur leider nicht...


Wäre toll, wenn ihr mir diesbezüglich nochmal weiterhelfen könnten :)
Vielen Dank,

Lg, t2k3

[EDIT]: Danke, hat sich schon alles erledigt, habs hingekriegt^^ :)