Hey! Hej Ted, jag dristar mig att svara, detta trots att det är väldigt nytt för mig. Bra grund, lite att tänka på: Hej! Som jag ser det,så krånglar du till det: > Ditt exempel är ett bra exempel på det jag inte fattar. Varför skulle jag någonsin behöva skriva "runat" o annat stuff? Varför mecka med ASP-taggar när jag skriver i C#? Eller du har din "code" i samma fil så att det fungerar ungefär på samma sätt som PHP, med att öppna o stänga PHP-taggarna? Tack, sorry för sents var. Har legat lite på latsidan med det projektet. Ska ta ett ryck snart igen =) Alla komponenter du hittar i WebForms-toolboxen är redan färdiga med runat=server. Skulle du vilja använda dig av det som finns under HTML i toolboxen måste du skriva in runat=server för att komma åt dem i cs-filen... Hej igen, HejsanASP.NET / C#: Tacksam för ett enkelt exempel med forms
Jag behöver lite starthjälp med ASP.NET, fattar inte riktigt hur det hänger ihop med websidorna... jag har skrivit i PHP i flera år. JAVA, C# och annat är jag också väl förtrogen med men jag fattar inte ASP.NET - ska man skriva HTML/ASP som man vanligtvis scriptar eller ska man skriva allt i C# - "objectorienterat"?
Verkar rörigt tycker jag. Det enda jag ser när jag söker på nätet är de vanliga ASP script-taggarna o helt plötsligt kommer lite C#-kod. Jag kan få upp en sida med olika formulär enligt nedan, men sedan vet jag inte hur jag skickar vidare data via POST/GET och sedan hur och var jag läser in dem.
Testade lite att skriva sådant i "code behind" men fick det inte att fungera.
Tacksam ifall någon kan skriva ett kort exempel, säg... En ruta som man fyller i, klickar på "Submit" och att sedan en Label på "samma sida" uppdateras med det nyss inskrivna värdet.
Tacksam för lite hjälp!
Hälsningar,Sv: ASP.NET / C#: Tacksam för ett enkelt exempel med forms
Många saker är mycket lättare, andra lite klurigare och det tar sin tid innan man får klämm på det.
När du öppnar en ny webbplats, och lägger till en webbform, så om du inte har för bråttom, så ser du nertill i inläggningsformuläret, att du kan välja om du vill ha sidan med codebehind, jag föredrar detta.
Det innebär att den ena filen blir då default.aspx.
Här ritar du upp (du behöver inte skriva någon html-kod här, de kontroller som du vill ha.
I default.aspx.cs, där lägger du all kod.
Ta nu och rita upp en label, label1, en textruta, textbox1 och en knapp, button1 i default.aspx.
Placera de som du vill.
I soution Explorer, så ser du den andra filen, Default.aspx.se, dubbelklicka på den.
Du kommer då att se
<code>
protected void Page_Load(object sender, EventArgs e)
{
}
</code>
skriv in
<code>
if (IsPostBack)
{
}
</code>
Detta betyder helt enkelt, om du har tryckt på knappen så skall det köras det som är innanför
måsvingarna, annars inte.
I detta fallet så föredrar jag dock att dubbelklicka på knappen
Skriv in
<code>
Label1.txt=Textbox1.txt;
</code>
..och detta skall räcka för att du skall kunna se resultatet.Sv:ASP.NET / C#: Tacksam för ett enkelt exempel med forms
När du dubbelklickar på knappen kommer du få upp följande rad:
<code>
protected void Button1_Click(object sender, EventArgs e)
{
}
</code>
Det är bättre att lägga in koden här än i Page_Load. När du kör IsPostBack i Page_Load så genereras den koden alltid så fort det sker en aktiv händelse på sidan. Har man flera knappar eller andra kontroller med autopostback=true på så får man lite oönskade effekter. Därför är det generellt sätt bättre att alltid lägga händelsen i kontrollen för själva knappen. Så en hel sida för att skriva ut textboxen till en label kan se ut så här:
<code>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = TextBox1.Text;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
<asp:Label ID="Label1" runat="server"></asp:Label> </div>
</form>
</body>
</html>
</code>Sv:ASP.NET / C#: Tacksam för ett enkelt exempel med forms
Tack för svar, men problemet blev inte riktigt besvarat =(
Hans:
Ditt exempel är ett bra exempel på det jag inte fattar. Varför skulle jag någonsin behöva skriva "runat" o annat stuff? Varför mecka med ASP-taggar när jag skriver i C#? Eller du har din "code" i samma fil så att det fungerar ungefär på samma sätt som PHP, med att öppna o stänga PHP-taggarna?
Benni:
Det fungerar som du sa. Verkade inte göra det innan (eller nåt?). Kanske ni kan assistera lite till? =)
Jag har, enligt nedan, en ListBox som jag slänger inte lite värden i. Sedan vill jag markera ett alternativ, klicka på knappen och få det som står i ListBox:en i en Label (inte i slutändan, men vi börjar med det).
Det fungerar såklart inte, utan jag får följande fel:
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
Line 90: private void Button1_Click(object sender, System.EventArgs e)
Line 91: {
Line 92: System.Web.UI.WebControls.ListItem it = ListBox1.Items[ListBox1.SelectedIndex];
Line 93: Label4.Text = it.Value.ToString();
Line 94:
Det verkar som om inte SelectedIndex kommer med på nåt sätt...?
<code>
sqlDataAdapter.SelectCommand = comm;
ds = new DataSet("users");
sqlDataAdapter.Fill(ds, "users");
ArrayList users = new ArrayList();
ListBox1.Items.Clear();
if (!t)
{
for (int i = 0; i < ds.Tables["users"].Rows.Count; i++)
{
DataRow row = ds.Tables["users"].Rows[i];
ListBox1.Items.Add(new System.Web.UI.WebControls.ListItem(row["firstname"].ToString()+" "+row["lastname"].ToString(), i.ToString()));
}
t = true;
}
</code>
och
<code>
private void Button1_Click(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.ListItem it = ListBox1.Items[ListBox1.SelectedIndex];
Label4.Text = it.Value.ToString();
}
</code>Sv: ASP.NET / C#: Tacksam för ett enkelt exempel med forms
<code>
private void Button1_Click(object sender, System.EventArgs e)
{
Label4.Text = ListBox1.text
'du kan också välja selectedvaule eller selecteditim
}
</code>
...det är bara att bröva sig fram.Sv: ASP.NET / C#: Tacksam för ett enkelt exempel med forms
I asp.net så tragglar du inte runt med att skriva ut strängar till höger och vänster, stoppa en massa html i olika if-satser och liknande. Du kör istället något med "oop-vänligt", eller vad man nu ska kalla det. Om du sätter dit runat="server" på en (x)html-tagg så kommer asp.net att istället för att bara tolka taggen som text som ska spottas ut istället skapa ett objekt på servern varje gång sidan anropas. Det objektet har sedan egenskaper, t.ex. text, underkontroller, css, eller händelser (t.ex. har en textbox event för om texten har ändrats mellan två postbacks.) För att asp.net ska veta vad du vill göra serverkontroller av så måste du markera det på något sätt. Därav runat="server"
> Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
Om du inte har markerat någon rad i din listbox så retunerar den -1. Tänk på att listboxen måste innehålla någonting också, använder du viewstate? Viewstate lagrar i det här fallet innehållet i din lsitbox mellan sidladdningarna i ett gömt fält på sidan. Om det är avstängt måste du själv lägga in det, och du måste lägga in det innan click-händelsen körs.Sv:ASP.NET / C#: Tacksam för ett enkelt exempel med forms
Sv: ASP.NET / C#: Tacksam för ett enkelt exempel med forms
Du måste kanske även ange den komponent högst upp bland de andra "protected System.Web.UI.WebControls.Button Button1;".... Dett brukar krångla lite för mig, ibland kommer det upp ibland inte.
Sen även för att få ditt arbete så dynamiskt och objektorienterat som möjligt, försök att använda så många funktioner som möjligt:
private void DittNamnPåFunktionen()
{
Label1.Text = TextBox1.Text;
}
och sen anropa den på din knapp
DittNamnPåFunktionen();
Sv:ASP.NET / C#: Tacksam för ett enkelt exempel med forms
kom på att man inte kan "re-populate" ListBox:en när man gjort en "post".
i min Page_Load fick jag alltså köra en:
<code>
if (!Page.IsPostBack)
{
...
}
</code>
verkar fungera bättre nu...Sv: ASP.NET / C#: Tacksam för ett enkelt exempel med forms
Kolla dessa filmer från Microsoft
http://msdn.microsoft.com/vstudio/express/vwd/learning/default.aspx
Små och korta filmer för nybörjare till :NET & ASP.NET
/Micke S