webForumDet fria alternativet

skicka med variabler från annan sida

.NET

18 svar · 690 visningar · startad av netfeed

Medlem sedan mars 2001593 inlägg
Frågan#1

sitter och skriver ett webbformulär som sedan skall skickas via email till en supportlåda
nu undrar jag hur man skickar vidare data...

<form method=Post action=test.aspx>
<br>
från <input type="text" name="from" size="20"><br>
<br>
till  <SELECT NAME="to">
        <OPTION value="one">1
        <OPTION value="two">2
        <OPTION value="three">3
     </SELECT>

<TEXTAREA NAME="comments" ROWS="8" COLS="40">Enter Problem Here.</TEXTAREA>
<INPUT TYPE="text" NAME="applicationname">

<input type=submit value=Submit></form>

okej detta är ju då itne jättevackert men det funkar för syftet

sedan använder jag

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Mail" %>
<script runat="server">
private void Page_Load(object sender, System.EventArgs e) {  

  // make sure we use the local SMTP server
  SmtpMail.SmtpServer = "";

  // create mail message object
  MailMessage oMessage = new MailMessage();

  // set some properties
  oMessage.BodyFormat = MailFormat.Text;
  oMessage.Priority = MailPriority.High;
  oMessage.From = "me@myself.com";
  oMessage.To = "någons email";
  oMessage.Cc = "";
  oMessage.Bcc = "";
  oMessage.Subject = "Test Mail";
  oMessage.Body = "This is a test e-mail, please ignore.\r\rBest regards,\rWimdows.net";
  // Send the e-mail
  SmtpMail.Send(oMessage);
}
</script>

inte så fint detta heller med det funkar även detta för syftet

okej nu vill jag ha hjälp med att få in från fältet i from och värdet i to till to och sedan textarean och application name i bodyn

jag skulle verkligen vilja veta hur man gör för jag har aldrig programmerat i .net och kan inte ett tjaffs asp, skulle jag fått bestämma skulle det blivitt i php men detta är nu inte fallet så jag skulle vilja lära mig hur man skickar vidare så här... snälla hjälp mig

Medlem sedan juni 20011 732 inlägg
#2

okej nu vill jag ha hjälp med att få in från fältet i from och värdet i to till to och sedan textarean och application name i bodyn

//liten redigering, missförstod dig nog.

Först och främst, använd asp.net-kontroller så blir det roligare:

i layouten:
<form>
  <asp:TextBox ID="mailTB" Runat=server></asp:TextBox>
</form>

i koden:
oMessage.From = mailTB.Text;
oMessage.Body = "här kommer mailen" + mailTB.Text;;
Medlem sedan mars 2001593 inlägg
#3

men jag vill ha dem från en från en annan sida, jag vill plocka dem från vad en användare skriver in i ett formulär

Medlem sedan juni 20011 732 inlägg
#4

Jag redigerade precis inlägget ovan då jag nog missförstod dig (om du inte sett det). Du behöver inte en annan sida, den logik du vill ha sköter du på en och samma sida.

Medlem sedan mars 2001593 inlägg
#5

får testa detta och komma sedan med nya frågor =)

Medlem sedan juni 20011 732 inlägg
#6

skulle jag fått bestämma skulle det blivitt i php

Tur att du inte fick bestämma... ;)

Medlem sedan mars 2001593 inlägg
#7

men nu finns det ju inga definitioner till text...

Medlem sedan mars 2001593 inlägg
#8
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Mail" %>
<form runat=server>
  <asp:TextBox ID="sender" Runat=server></asp:TextBox>
  <input type=submit value=Submit>
</form>

<script runat="server">
private void Page_Load(object sender, System.EventArgs e) {  

  // make sure we use the local SMTP server
  SmtpMail.SmtpServer = "";

  // create mail message object
  MailMessage oMessage = new MailMessage();

  // set some properties
  oMessage.BodyFormat = MailFormat.Text;
  oMessage.Priority = MailPriority.High;
  oMessage.From = sender.Text;
  oMessage.To = "victor.vb.bergoo@volvo.com";
  oMessage.Subject = "Test Mail";
  oMessage.Body = "This is a test e-mail, please ignore.\r\rBest regards,\rWimdows.net";
  // Send the e-mail
  SmtpMail.Send(oMessage);
}
</script>

detta ger mig bara fel, men om jag ändrar oMessage.From = sender.Text; till oMessage.From = "test"; så fungerar det

Medlem sedan juni 20011 732 inlägg
#9

Vet inte riktigt vad du menar, men vi tar det från början. Det finns en mängd olika asp.net-kontroller färdiga att använda (du kan naturligtvis även göra egna). En av dessa kontroller är en textbox och den skriver du i sin enklaste form så här:

<asp:TextBox runat=server>

Runat=server betyder helt enkelt att kontrollen exekveras på servern, när sidan exekverats och skickats till användaren är den omvandlad till en vanlig html-tagg (din webbläsare kan ju inte själv tolka vad en <asp:textbox> är).

För att kunna använda den i din kod behöver du normalt sätta ett id på den - <asp:TextBox id="minTextBox" runat="server" />

Från koden kan du sedan både sätta och hämta värden och egenskaper på din kontroll, exempelvis:

public System.Web.UI.WebControls.TextBox minTextBox;

//hämta värde:
string s = minTextBox.Text;
//sätta värde
minTextBox.Text = "en sträng";

Istället för din input type=submit så har du en <asp:Button> som startar en funktion som gör din email-grejja och sedan postas sidan tillbaka till användaren beroende på hur du vill ha den. Eftersom du inte använder code behind så sätter du ett onclick event i din button och kör funktionen:

i presentationslagret:
<asp:Button id="Button1" OnClick="myFunction" runat="server" Text="Tryck här"></asp:Button>

i koden:
public void myFunction(object sender, System.EventArgs e) {
  string s = minTextBox.Text;
  //mer kod...
}
Medlem sedan mars 2001593 inlägg
#10

mitt fel, tänkte fel, men nu funkar det iaf
mer frågor kommer snart

Medlem sedan mars 2001593 inlägg
#11

okej, nu får jag bara fel, funkade i två minuter sen får jag bara fel som säger At least one of the From or Sender fields is required, and neither was found.

det konstiga är ju att det inte skall sättas förren jag tyckt på knappen...

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Mail" %>
<form runat=server>
<table>
<tbody>  
<tr>
	<td>Email</td>	
	<td><asp:TextBox ID="ebrev" Runat=server></asp:TextBox></td>
</tr>
<tr>
	<td>Servername</td>	
	<td><asp:TextBox ID="servername" Runat=server></asp:TextBox></td>
</tr>  
<tr>
	<td><asp:Button id="Button1" OnClick="sendMail" runat="server" Text="Tryck här"></asp:Button></td>
</tr>
</tbody>
</table>
</form>

<script runat="server">

private void sendMail(object sender, System.EventArgs e) {  

  // make sure we use the local SMTP server
  SmtpMail.SmtpServer = "";

  // create mail message object
  MailMessage oMessage = new MailMessage();

  // set some properties
  oMessage.BodyFormat = MailFormat.Text;
  oMessage.Priority = MailPriority.High;
  oMessage.From = ebrev.Text;
  oMessage.To = "victor.vb.bergoo@volvo.com";
  oMessage.Subject = "Help with " + servername.Text;
  oMessage.Body = "This is a test e-mail, please ignore.\r\rBest regards,\rWimdows.net";
  // Send the e-mail
  SmtpMail.Send(oMessage);
}
</script>
Medlem sedan mars 2001593 inlägg
#12

det är bara jag som är galen... klart att det funkar...
nåväl

<SELECT NAME="to">
<OPTION value="one">1
<OPTION value="two">2
<OPTION value="three">3
</SELECT>

hur gör man sådana här då?

Medlem sedan sep. 20011 914 inlägg
#13

[```
<asp:DropDownList id="ddlTo" runat="server">
<asp:ListItem Value="one" text="1"/>
<asp:ListItem Value="two" text="2"/>
<asp:ListItem Value="three" text="3"/>
</asp:DropDownList>

Medlem sedan juni 20011 732 inlägg
Medlem sedan mars 2001593 inlägg
#15

nu fungerar det skitbra :) förutom två grejer... :(

jag skulle behöva en "safetrigger", något som gör att man åste skriva in vissa värden för att mailet skall skickas

sedan behöver jag veta hur man gör för att inte skicka mailet varje gång man refreshar sidan...

koden så sm den ser ut nu

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Mail" %>

<form runat=server>
<table>
<tbody>  
<tr>
    <td>Name:</td>    
    <td><asp:TextBox ID="senderName" Runat=server width=180px /></td>
</tr>
<tr>
    <td>ID:</td>    
    <td><asp:TextBox ID="userID" Runat=server width=180px /></td>
</tr>
<tr>
    <td>Email:</td>    
    <td><asp:TextBox ID="email" Runat=server width=180px /></td>
</tr>
<tr>
    <td><br></td>
</tr>
<tr>
    <td>Servername:</td>    
    <td><asp:TextBox ID="servername" Runat=server width=180px /></td>
</tr>  
<tr>
    <td>Applicationname:</td>    
    <td><asp:TextBox ID="application" Runat=server width=180px /></td>
</tr>  
<tr>
    <td><br></td>
</tr>
<tr>
    <td valign=top>Problem description:</td>    
    <td><asp:TextBox TextMode=MultiLine ID="problem" Runat=server width=400px height=150px /></td>
</tr>  
<tr>
    <td><center><asp:Button id="Button1" OnClick="sendMail" runat="server" Text="Submit" /></center></td>
</tr>
</tbody>
</table>
</form>

<script runat="server">
private void sendMail(object sender, System.EventArgs e) {  
  // make sure we use the local SMTP server
  SmtpMail.SmtpServer = "";

  // create mail message object
  MailMessage oMessage = new MailMessage();

  // set some mailproperties
  oMessage.BodyFormat = MailFormat.Text;
  oMessage.Priority = MailPriority.High;
  oMessage.From = email.Text;
  oMessage.To = "victor.vb.bergoo@volvo.com";
  oMessage.Subject = "Help with " + servername.Text;
  oMessage.Body = "Userinfo:\nName: " + senderName.Text + "\nID: " + userID.Text + "\nE-mail: " + email.Text + "\n\nServer: " + servername.Text + "\nApplication: " + application.Text + "\n\nProblem Description: " +  problem.Text;
  // Send the e-mail
  SmtpMail.Send(oMessage);
}
</script>
Medlem sedan juni 20011 732 inlägg
#16

Det finns asp.net-kontroller för allt. :) Du har ett gäng olika validatorer att välja på, RequiredFieldValidatior (som kanske är vad du söker), RegularExpressionValidator (som du sedan använder för mer avancerade checks), CompareValidator, RangeValidator, CustomValidator samt SummaryValidator. Den är mycket lätt att använda, se länken.

Det fina med dessa är att kontrollen sker på klienten (om browsern klarar det vill säga). Kontrollerna genererar alltså ett javascript utan att du behöver tänka på det. :)

Medlem sedan juni 20011 732 inlägg
#17

sedan behöver jag veta hur man gör för att inte skicka mailet varje gång man refreshar sidan...

Glömde visst din andra fråga... jo, för att köra koden endast när knappen blivit tryckt så kan du kolla att det är just den knappen som blivit tryckt. Det kan du göra genom att först sätta ett commandargument på din button:

<asp:Button CommandArgument="foo" .. />

Sedan gör du en if-sats i din funktion där du tittar att objektet som kör den här funktionen verkligen är den här knappen:

private void sendMail(object sender, System.EventArgs e) {  
  if(((Button)sender).CommandArgument == "foo") {
    //Kod exekveras här endast om knappen blivit tryckt
  }
}
Medlem sedan mars 2001593 inlägg
#18

colt tack
fatta inte riktigt ditt första svar men det andra fungerar nog...

Medlem sedan juni 20011 732 inlägg
#19

Jo, jag menar att med dessa validatorer så kan du styra dina besökare att skriva giltiga värden i dina formulär, exempelvis att med en RegularExpressionValidator se till att användaren endast kan skriva in en giltig email-adress i fältet för email (med giltig menar jag då att det är en mailadress till sin utformning, om den sedan finns och fungerar är en annan sak). Validatorn kopplar du till respektive fält, dessa exekveras på servern (runat=server du vet) och när sidan skickas till klienten så har dessa kontroller skapat ett javascript som kontrollerar textinmatning direkt på klienten.

Hur detta fungerar samt kodexempel hittar du i länkarna jag gav dig ovan.

280 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
153 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)