2016-10-10 4 views
0

Also ich versuche, ein einfaches Formular zu machen und es senden und per E-Mail basierend auf den Informationen auf dem Formular. Dies ist ein Unterfenster, in dem Sie den Parameter von der URL ([email protected]) erhalten sollen. Bis jetzt fange ich den Wert von der Post und zeige es auf dem Textfeld an.Ereignisbehandlung Ignorieren des Parameters von URL

Aber immer wenn ich einen anderen Wert eintippe und ich auf den Knopf "Senden" drücke, egal ob ich den Wert in der Textbox ändere, nimmt er nur den Wert von der URL und ignoriert den Wert auf der Box.

Und wenn ich es manuell öffnen (messages.aspx), dann fügen Sie die E-Mail natürlich hinzu, da es keinen Parameter in der URL gibt, ich bekomme nur die "Bitte eine E-Mail hinzufügen". Ich denke, es ist ein Event-Handling-Problem. Aber ich bin ziemlich neu dazu.

Messages.aspx.cs

public partial class Messages : System.Web.UI.Page 
{ 

    public string emails = "";  
    protected void Page_Load(object sender, EventArgs e) 
    { 
     loadList(); 
     emailT.Text = Request.QueryString["mail"]; 

    } 

    protected void SendMail(object sender, EventArgs e) 
    { 
     BO.Messages mail = new BO.Messages(); 
     emails = Request.QueryString["mail"]; 
     if (emails != "") 
     { 
      emailT.Text = emails; 
     } 
     if(emailT.Text == "") 
     { 
      ClientScript.RegisterStartupScript(this.GetType(), "Redirect", "alert('Please fill in an email')", true); 
     } 
     else 
     { 
      mail.TemplateEmail(emailT.Text, title.Text, txtDetails.Text); 
      ClientScript.RegisterStartupScript(this.GetType(), "Redirect", "alert('Email sent!'); window.close()", true); 
     } 


    } 

Messages.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Messages.aspx.cs" Inherits="ASF.HC.JobApplication.Admin.Messages" %> 
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
    <style type="text/css"> 
     #Button2 { 
     } 
    </style> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <h2>Messages</h2> 
    <br /> 
    <asp:ScriptManager ID="ScriptManager2" runat="server"></asp:ScriptManager> 
    <legend>Pick the template to use:</legend> 
    <asp:dropdownlist id ="ddlTemplate" runat ="server" Height="23px" Width="436px"> 
        </asp:dropdownlist >  
    <asp:Button ID="Button1" runat="server" Text="Select" OnClick="Template_Changed" /> 
    <br /> <legend>Email Recipient: </legend> 
       <asp:TextBox ID ="emailT" runat="server" Width="356px" Height="24px" Visible="true" Text="[email protected]"></asp:TextBox> 
    <br /><legend>Email Subject: </legend><asp:TextBox ID ="title" runat="server" Width="356px" Height="24px" Visible="true" ></asp:TextBox>  
     <br /> <br /> <asp:TextBox ID ="txtDetails" runat="server" Width="850px" Height="267px" Visible="true" ></asp:TextBox> 
      <ajaxToolkit:HtmlEditorExtender ID="TextBox1_HtmlEditorExtender" runat="server" TargetControlID="txtDetails" 
       EnableSanitization="false" DisplaySourceTab="true" > 
      </ajaxToolkit:HtmlEditorExtender><br /> 
    <br /><div align="center"> 
    <br /> 
     <legend>If you want to save the template, name it: (Optional) </legend><asp:TextBox ID ="nameTemplate" runat="server" Width="356px" Height="24px" Visible="true" ></asp:TextBox> 
     <br /><br /> 
     <asp:Button ID="Button2" runat="server" Text="Send" Height="44px" Width="132px" OnClick="SendMail"/> <asp:Button ID="Button3" runat="server" Text="Save Template" Height="44px" Width="132px" OnClick="saveTemplate"/> 
    </div> 
    <br /> 
</asp:Content> 

Dank!

Antwort

1

Fügen Sie ein "not Postback" in das Page-Load-Ereignis ein und fordern Sie den Wert von querystring nur einmal durch Seitenladen an.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) { 
     loadList(); 
     emailT.Text = Request.QueryString["mail"]; 
    } 
} 

protected void SendMail(object sender, EventArgs e) 
{ 
    BO.Messages mail = new BO.Messages(); 

    if(emailT.Text == "") 
     { 
      ClientScript.RegisterStartupScript(this.GetType(), "Redirect", "alert('Please fill in an email')", true); 
     } 
     else 
     { 
      mail.TemplateEmail(emailT.Text, title.Text, txtDetails.Text); 
      ClientScript.RegisterStartupScript(this.GetType(), "Redirect", "alert('Email sent!'); window.close()", true); 
     } 
    } 
+0

Hinzugefügt, gleiche Ausgabe. Offenbar geht es nur um die Mail auf der URL, also wenn ich ** messages.aspx ** versuche, egal was ich tippe, bekomme ich die "Bitte eine E-Mail ausfüllen". Und wenn ich versuche, ** [email protected]**, egal was ich in das Textformular eintippe, es wählt nur das auf der URL. –

+0

Sorry Kumpel. Ich habe auch die Funktion SendMail aktualisiert. Sie müssen nicht zweimal nach dem Parameter fragen. Sie tun beim Seitenladen und nach, holen Sie den Wert in der Textbox. – Fantasterei

+0

Brilliant! Lief wie am Schnürchen. Thnaks –

0

Aber immer, wenn ich einen anderen Wert eingeben und ich traf auf die Schaltfläche „Senden“, egal ob ich den Wert auf das Textfeld tun ändern, ist es nur, um den Wert der URL nehmen, vollständig das Ignorieren Wert auf der Box.

Sie setzen den Wert des Textfelds auf den der Abfragezeichenfolge in page_load?

emailT.Text = Request.QueryString["mail"];