我有点不知所措!我有一个特殊的表单,允许我的客户请求特定产品的报价(由URL中的PID定义)表单加载到模式对话框内,并在iframe内。 Iframe的src值是从产品页面上的ahref的onclick事件设置的,例如;
<div id='basic-modal'><p><br /><br /><a href='#' class='basic' onClick="document.getElementById('ifr').src='quote/Public/Default.aspx?PID=111'">CLICK ME</a></p></div>
<div id="basic-modal-content">
<iframe id="ifr" width="850px" height="600px" frameborder="0" scrolling="no"></iframe>
我正在加载的表单在触发Page_Load时执行SQL插入。它也在内 如果Page.IsPostBack = False那么
由于某些奇怪的原因,页面在页面加载时会执行两次,而另一次页面关闭时...我需要在第一页加载时插入SQL插件,因为我的表单使用了返回的值。任何人都可以建议一个很好的方法来使Page_Load中的代码只启动一次吗?
非常感谢!
更新,完整代码:
aspx页面
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Public_Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!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">
<link href="../quoteFront.css" rel="stylesheet" type="text/css" />
<title></title>
<style type="text/css">
.style1
{
width: 100%;
}
.style2
{
height: 26px;
}
.style5
{
width: 299px;
}
.style6
{
width: 174px;
}
.style7
{
height: 26px;
width: 174px;
}
.style8
{
width: 291px;
}
.style9
{
height: 26px;
width: 189px;
}
.style10
{
}
.style11
{
width: 189px;
}
.style12
{
width: 191px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="true" CombineScripts="false" >
</cc1:ToolkitScriptManager>
</div>
<asp:UpdatePanel ID="UpdatePanel3" runat="server"><ContentTemplate>
<asp:Panel ID="Panel2" runat="server">
<table class="style1">
<tr>
<td class="style12">
First name</td>
<td class="style5">
<asp:TextBox ID="txtFirstName" runat="server" Width="300px"
AutoCompleteType="FirstName"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="txtFirstName" ErrorMessage="* Required" ForeColor="Red"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="style12">
Last name</td>
<td class="style5">
<asp:TextBox ID="txtLastName" runat="server" Width="300px"
AutoCompleteType="LastName"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="txtLastName" ErrorMessage="* Required" ForeColor="Red"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="style12">
Company name</td>
<td class="style5">
<asp:TextBox ID="txtCompanyName" runat="server" Width="300px"
AutoCompleteType="Company"></asp:TextBox>
</td>
<td>
</td>
</tr>
<tr>
<td class="style12">
Email address</td>
<td class="style5">
<asp:TextBox ID="txtEmailAddress" runat="server" Width="300px" AutoCompleteType="Email"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server"
ControlToValidate="txtEmailAddress" ErrorMessage="* Required"
ForeColor="Red"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="txtEmailAddress" ErrorMessage=" * Invalid email address"
ForeColor="Red"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>
</td>
</tr>
<tr>
<td class="style12">
Phone number</td>
<td class="style5">
<asp:TextBox ID="txtPhoneNumber" runat="server" Width="300px" AutoCompleteType="BusinessPhone"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server"
ControlToValidate="txtPhoneNumber" ErrorMessage="* Required"
ForeColor="Red"></asp:RequiredFieldValidator>
</td>
</tr>
</table>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<div>
<table class="style1">
<tr>
<td class="style11">
Quantity required</td>
<td class="style6">
<asp:TextBox ID="txtQuantity1" runat="server" AutoPostBack="True"></asp:TextBox>
<cc1:FilteredTextBoxExtender ID="ftbe" runat="server" FilterType="Numbers"
TargetControlID="txtQuantity1" />
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server"
ControlToValidate="txtQuantity1"
ErrorMessage="* Please enter quantity required" ForeColor="Red"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="style11">
<asp:Label ID="lblDesigninfo" runat="server" Text="Printing info"></asp:Label>
</td>
<td class="style6">
<asp:DropDownList ID="drpDesignInfo1" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSource1" DataTextField="PrintInfoDesc"
DataValueField="ID" AppendDataBoundItems="True">
<asp:ListItem></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:quotingSystemConnectionString %>"
SelectCommand="SELECT [ID], [PrintInfoDesc] FROM [PrintInfo]">
</asp:SqlDataSource>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server"
ControlToValidate="drpDesignInfo1" ErrorMessage="* Please select"
ForeColor="Red"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="style11">
<asp:Label ID="lblColoursSideOne1" runat="server"
Text="Colour options first side" Visible="True"></asp:Label>
</td>
<td class="style6">
<asp:DropDownList ID="drpColoursSideOne1" runat="server" Visible="True"
AutoPostBack="True">
</asp:DropDownList>
</td>
<td>
</td>
</tr>
<tr>
<td class="style9">
<asp:Label ID="lblColoursSideTwo1" runat="server"
Text="Colour options second side" Visible="false"></asp:Label>
</td>
<td class="style7">
<asp:DropDownList ID="drpColoursSideTwo1" runat="server" Visible="false">
</asp:DropDownList>
</td>
<td class="style2">
</td>
</tr>
</table>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="txtQuantity1" EventName="TextChanged" />
<asp:AsyncPostBackTrigger ControlID="drpDesignInfo1"
EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="drpColoursSideOne1"
EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate>
<div style="text-align: center">Please fill in the above fields before uploading
artwork.
<br />
When the upload is complete you will get the option to upload additional
artwork.
<cc1:AsyncFileUpload ID="AsyncFileUpload1" runat="server"
CompleteBackColor="Lime" ErrorBackColor="Red"
OnClientUploadComplete="UploadComplete" OnClientUploadError="uploadError"
OnClientUploadStarted="StartUpload"
onuploadedcomplete="AsyncFileUpload1_UploadedComplete" ThrobberID="Throbber"
UploaderStyle="Modern" UploadingBackColor="#66CCFF" Width="100%"
ClientIDMode="Inherit" />
<asp:Label ID="Throbber" runat="server" Style="display: none">
<img src="../Images/indicator.gif" align="absmiddle" alt="loading" />
</asp:Label><asp:Label ID="lblStatus" runat="server"></asp:Label>
<br />
<div style="max-height:70px; overflow : auto; ">
<asp:Label ID="lblUploadList" runat="server" ForeColor="#006600"
Font-Size="Smaller"></asp:Label>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<table class="style1">
<tr>
<td class="style10">
Any aditional info<asp:TextBox ID="txtComments" runat="server" Height="111px"
TextMode="MultiLine" Width="100%"></asp:TextBox>
</td>
</tr>
<tr>
<td class="style8">
<asp:Button ID="Button1" runat="server" Text="Send Request" Width="100%"
Height="45px" Font-Bold="False" />
</td>
</tr>
</table>
</asp:Panel>
<br />
<asp:Panel ID="Panel1" runat="server" Visible="False">
Thank you for requesting a quote. A member of our sales team will be in touch
shortly.<br />
<br />
<asp:Button ID="btnRequestAnother" runat="server"
Text="Request another quote for this product" CausesValidation="False"
Height="45px" Width="100%"/>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript" language="javascript">
function uploadError(sender, args) {
document.getElementById("lblStatus").innerHTML = "Failed to upload " + args.get_fileName() + ". Please try again. If problem persistes please email sales@thecleverbaggers.co.uk";
document.getElementById("Button1").innerHTML = 'Send Request';
}
function StartUpload(sender, args) {
document.getElementById("lblStatus").innerHTML = 'Uploading Started. Depending on your connection speed this can take a very long time. Please wait....';
document.getElementById("Button1").innerHTML = 'Uploading Started. Please Wait....';
}
function UploadComplete(sender, args) {
var filename = args.get_fileName();
var contentType = args.get_contentType();
var text = "Upload Complete, Press Select File to upload more. " //"Size of " + filename + " is " + args.get_length() + " bytes";
if (contentType.length > 0) {
text //+= " and content type is '" + contentType + "'.";
}
document.getElementById("lblStatus").innerHTML = text;
document.getElementById("lblUploadList").innerHTML = document.getElementById("lblUploadList").innerHTML + "<br />" + filename + " Uploaded Successfully";
document.getElementById("Button1").innerHTML = 'Send Request';
}
</script>
</form>
</body>
VB代码:
Imports System.Data
Imports System.IO
Imports System.Data.SqlClient
Partial Class Public_Default
Inherits System.Web.UI.Page
Dim ArtworkID As Integer
Dim customerIDDecrypt As String
Public QuoteID As Integer
Dim UploadedFileList As String
Dim productID As String
'Shared IsFirstTime As Boolean = False
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
productID = Request.QueryString("PID")
customerIDDecrypt = "0"
'If Not Page.IsPostBack AndAlso Not IsFirstTime Then
If Not Page.IsPostBack Then
Try
Dim sql As String = "INSERT INTO [Quote] (Status, CreationDate, CreationTime, CustomerID, ProductID, IP)" & _
"VALUES (@Status, @CreationDate, @CreationTime, @CustomerID, @ProductID, @IP) SELECT SCOPE_IDENTITY()"
Using cn As New SqlConnection(ConfigurationManager.AppSettings("quotingSystemConnectionString")), _
cmd As New SqlCommand(sql, cn)
cmd.Parameters.Add("@Status", SqlDbType.NVarChar).Value = 1
cmd.Parameters.Add("@CreationDate", SqlDbType.Date).Value = Date.UtcNow.ToLocalTime
cmd.Parameters.Add("@CreationTime", SqlDbType.Time).Value = Date.UtcNow.ToLocalTime.TimeOfDay
cmd.Parameters.Add("@CustomerID", SqlDbType.Int).Value = customerIDDecrypt
cmd.Parameters.Add("@ProductID", SqlDbType.Int).Value = productID
cmd.Parameters.Add("@IP", SqlDbType.NVarChar).Value = CStr(Request.UserHostAddress())
cn.Open()
'//grab the ID of this insert.
QuoteID = Integer.Parse(cmd.ExecuteScalar().ToString())
cn.Close()
'IsFirstTime = True
End Using
Catch ex As Exception
'// do something with this error!
Response.Write(ex.Message)
End Try
End If
End Sub
Protected Sub txtQuantity1_TextChanged(sender As Object, e As System.EventArgs) Handles txtQuantity1.TextChanged
'//populate colours dependant on quantity
If txtQuantity1.Text > "" Then
If txtQuantity1.Text < "100" Then
'side one
drpColoursSideOne1.Items.Clear()
'drpColoursSideOne1.Enabled = True
drpColoursSideOne1.Items.Add(New ListItem("One colour", "1"))
drpColoursSideOne1.Items.Add(New ListItem("More than one colour", "full"))
drpColoursSideOne1.Items.Add(New ListItem("I don't know!", "help"))
drpColoursSideOne1.Visible = True
'side two
drpColoursSideTwo1.Items.Clear()
'drpColoursSideTwo1.Enabled = True
drpColoursSideTwo1.Items.Add(New ListItem("One colour", "1"))
drpColoursSideTwo1.Items.Add(New ListItem("More than one colour", "full"))
drpColoursSideTwo1.Items.Add(New ListItem("I don't know!", "help"))
drpColoursSideTwo1.Items.Add(New ListItem("na", "na"))
Else
'side one
drpColoursSideOne1.Items.Clear()
'drpColoursSideOne1.Enabled = True
drpColoursSideOne1.Items.Add(New ListItem("One colour", "1"))
drpColoursSideOne1.Items.Add(New ListItem("Two colours", "2"))
drpColoursSideOne1.Items.Add(New ListItem("Three colours", "3"))
drpColoursSideOne1.Items.Add(New ListItem("Four colours", "4"))
drpColoursSideOne1.Items.Add(New ListItem("Five colours", "5"))
drpColoursSideOne1.Items.Add(New ListItem("Full colour (eg, photo)", "full"))
drpColoursSideOne1.Items.Add(New ListItem("I don't know!", "help"))
'side two
drpColoursSideTwo1.Items.Clear()
'drpColoursSideTwo1.Enabled = True
drpColoursSideTwo1.Items.Add(New ListItem("One colour", "1"))
drpColoursSideTwo1.Items.Add(New ListItem("Two colours", "2"))
drpColoursSideTwo1.Items.Add(New ListItem("Three colours", "3"))
drpColoursSideTwo1.Items.Add(New ListItem("Four colours", "4"))
drpColoursSideTwo1.Items.Add(New ListItem("Five colours", "5"))
drpColoursSideTwo1.Items.Add(New ListItem("Full colour (eg, photo)", "full"))
drpColoursSideTwo1.Items.Add(New ListItem("I don't know!", "help"))
drpColoursSideTwo1.Items.Add(New ListItem("na", "na"))
End If
Else
'nothing
End If
End Sub
Protected Sub drpDesignInfo1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles drpDesignInfo1.SelectedIndexChanged
If drpDesignInfo1.SelectedValue = "1" And txtQuantity1.Text > "0" Then
lblColoursSideTwo1.Visible = False
lblColoursSideOne1.Visible = True
drpColoursSideOne1.Visible = True
drpColoursSideOne1.Enabled = True
drpColoursSideTwo1.Visible = False
drpColoursSideTwo1.Enabled = False
drpColoursSideTwo1.SelectedValue = "na"
' drpColoursSideTwo1.Items.Remove(New ListItem("Same as the first side", "same"))
ElseIf drpDesignInfo1.SelectedValue = "3" And txtQuantity1.Text > "0" Then
lblColoursSideOne1.Visible = True
drpColoursSideOne1.Visible = True
drpColoursSideOne1.Enabled = True
lblColoursSideTwo1.Visible = True
drpColoursSideTwo1.Visible = True
drpColoursSideTwo1.Enabled = True
' drpColoursSideTwo1.Items.Remove(New ListItem("Same as the first side", "same"))
ElseIf drpDesignInfo1.SelectedValue = "2" And txtQuantity1.Text > "0" Then
lblColoursSideOne1.Visible = True
drpColoursSideOne1.Visible = True
drpColoursSideOne1.Enabled = True
lblColoursSideTwo1.Visible = True
drpColoursSideTwo1.Visible = True
drpColoursSideTwo1.Enabled = False
' Dim tmpCount2 = drpColoursSideTwo1.Items.Count
' If tmpCount2 = 7 Or tmpCount2 = 3 Then
'drpColoursSideTwo1.Items.Add(New ListItem("Same as the first side", "same"))
'End If
drpColoursSideTwo1.SelectedValue = drpColoursSideOne1.SelectedValue
End If
End Sub
Protected Sub AsyncFileUpload1_UploadedComplete(sender As Object, e As AjaxControlToolkit.AsyncFileUploadEventArgs)
System.Threading.Thread.Sleep(3000)
If AsyncFileUpload1.HasFile Then
'Dim strPath As String = newPath + Path.GetFileName(e.FileName)
'AsyncFileUpload1.SaveAs(strPath)
Dim fileName = Path.GetFileName(e.FileName)
'Dim imageBytes(AsyncFileUpload1.PostedFile.InputStream.Length) As Byte
'AsyncFileUpload1.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.length)
Dim imageBytes = AsyncFileUpload1.FileBytes
'AsyncFileUpload1.FileBytes
'// now insert this into the database
Try
Dim sql As String = "INSERT INTO [UploadedFiles] (CustomerID, FileName, FileSize, FileContent, FileType, FileUploadDate, QuoteID)" & _
"VALUES (@CustomerID, @FileName, @FileSize, @FileContent, @FileType, @FileUploadDate, @QuoteID) SELECT SCOPE_IDENTITY()"
Using cn As New SqlConnection(ConfigurationManager.AppSettings("quotingSystemConnectionStringLargeTimeout")), _
cmd As New SqlCommand(sql, cn)
cmd.CommandTimeout = "3600"
cmd.Parameters.Add("@CustomerID", SqlDbType.Int).Value = 1
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar).Value = fileName
cmd.Parameters.Add("@FileSize", SqlDbType.NVarChar).Value = AsyncFileUpload1.PostedFile.ContentLength
cmd.Parameters.Add("@FileContent", SqlDbType.VarBinary).Value = imageBytes
cmd.Parameters.Add("@FileType", SqlDbType.NVarChar, 50).Value = AsyncFileUpload1.PostedFile.ContentType
cmd.Parameters.Add("@FileUploadDate", SqlDbType.Date).Value = Date.UtcNow.ToLocalTime
cmd.Parameters.Add("@QuoteID", SqlDbType.Int).Value = QuoteID
cn.Open()
'//grab the ID of this insert.
ArtworkID = Integer.Parse(cmd.ExecuteScalar().ToString())
cn.Close()
End Using
Catch ex As Exception
'// do something with this error!
Response.Write(ex.Message)
End Try
End If
End Sub
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
'// Populate the database with remaining information
Button1.Text = "Please Wait... Sending Request"
Dim thisConnection As New SqlConnection(ConfigurationManager.AppSettings("quotingSystemConnectionString"))
'Create Command object
Dim nonqueryCommand As SqlCommand = thisConnection.CreateCommand()
Try
' Open Connection
thisConnection.Open()
' 1. Create Command
' Sql Update Statement
Dim updateSql As String = "UPDATE Quote " & _
"SET Status = '2', FirstName = @FirstName, LastName = @LastName, CompanyName = @CompanyName, Email = @Email, Phone = @Phone, Quantity = @Quantity, DesignInfo = @DesignInfo, CS1 = @CS1, CS2 = @CS2, Comments = @Comments " & _
"WHERE QuoteID = " & QuoteID
Dim UpdateCmd As New SqlCommand(updateSql, thisConnection)
' 2. Map Parameters
'UpdateCmd.Parameters.Add("@Status", SqlDbType.Int, "Status")
UpdateCmd.Parameters.Add("@FirstName", SqlDbType.NVarChar, 100, "FirstName")
UpdateCmd.Parameters.Add("@LastName", SqlDbType.NVarChar, 100, "LastName")
UpdateCmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 100, "CompanyName")
UpdateCmd.Parameters.Add("@Email", SqlDbType.NVarChar, 200, "Email")
UpdateCmd.Parameters.Add("@Phone", SqlDbType.NVarChar, 30, "Phone")
UpdateCmd.Parameters.Add("@Quantity", SqlDbType.Int, 20, "Quantity")
UpdateCmd.Parameters.Add("@DesignInfo", SqlDbType.NVarChar, 100, "DesignInfo")
UpdateCmd.Parameters.Add("@CS1", SqlDbType.NVarChar, 20, "CS1")
UpdateCmd.Parameters.Add("@CS2", SqlDbType.NVarChar, 20, "CS2")
UpdateCmd.Parameters.Add("@Comments", SqlDbType.NVarChar, 1000, "Comments")
''''''''''''''
'UpdateCmd.Parameters("@Status").Value = 2
UpdateCmd.Parameters("@FirstName").Value = txtFirstName.Text
UpdateCmd.Parameters("@LastName").Value = txtLastName.Text
UpdateCmd.Parameters("@CompanyName").Value = txtCompanyName.Text
UpdateCmd.Parameters("@Email").Value = txtEmailAddress.Text
UpdateCmd.Parameters("@Phone").Value = txtPhoneNumber.Text
UpdateCmd.Parameters("@Quantity").Value = txtQuantity1.Text
UpdateCmd.Parameters("@DesignInfo").Value = drpDesignInfo1.SelectedValue
UpdateCmd.Parameters("@CS1").Value = drpColoursSideOne1.SelectedValue
Dim CS2 As String
If drpDesignInfo1.SelectedValue = "1" Then
CS2 = "na"
Else
CS2 = drpColoursSideTwo1.SelectedValue
End If
UpdateCmd.Parameters("@CS2").Value = CS2
UpdateCmd.Parameters("@Comments").Value = txtComments.Text
'QuoteID
'''''''''''''''
UpdateCmd.ExecuteNonQuery()
Catch ex As SqlException
' Display error
Response.Write("FAIL: " & ex.Message)
Finally
' Close Connection
thisConnection.Close()
Panel1.Visible = True
Panel2.Visible = False
End Try
End Sub
Protected Sub btnRequestAnother_Click(sender As Object, e As System.EventArgs) Handles btnRequestAnother.Click
QuoteID = Nothing
Response.Redirect(Request.RawUrl)
Panel1.Visible = False
Panel2.Visible = True
'IsFirstTime = False
End Sub
Protected Sub drpColoursSideOne1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles drpColoursSideOne1.SelectedIndexChanged
If drpDesignInfo1.SelectedValue = "2" Then
drpColoursSideTwo1.SelectedValue = drpColoursSideOne1.SelectedValue
End If
End Sub
End Class
请原谅我凌乱的代码......
答案 0 :(得分:0)
static bool IsFirstTime = false;
在此之后
if(!Page.IsPostBack && !IsFirstTime)
{
insertdata();
IsFirstTime = true;
}
insertdata()将数据插入数据库。