修改
解决!感谢@Peter Campbell指出我正确的方向(然后做大部分腿部工作让我到那里)。代码改为:
If String.IsNullOrEmpty(output) Then
exists = False
Else
exists = True
End If
If String.IsNullOrEmpty(output) Then Return String.Empty
Dim c As GPCUser
If TypeOf HttpContext.Current.Session("Customer") Is GPCUser Then
c = CType(HttpContext.Current.Session("Customer"), GPCUser)
If c.AccountNo > 0 Then Return ""
End If
通过将设置'exists'布尔值的if语句移动到任何return语句之前,它们仍然可以正确触发并正确验证电子邮件,但也会正确地禁用该按钮。
结束修改
我有一个页面检查客户的电子邮件地址,看它是否在我们的数据库中。如果是,页面应该要求客户使用该电子邮件登录,而不是继续使用新帐户,但实际上并不会阻止他们继续使用。
我想禁用继续按钮,如果电子邮件地址已经在系统中但我无法弄清楚在哪里(我是商店的新网站开发人员,并且没有文档可以帮助我使用现有网站)
下面的代码,
<%@ Page Language="VB" MasterPageFile="~/Standard-no-menu.master" AutoEventWireup="false" CodeFile="billing-details.aspx.vb" Inherits="billing_details" %>
“); - &gt; “); - &gt;
<script language="javascript" type="text/javascript">
function validateForm()
{
if(document.getElementById('<%= lstPaymentOptions.ClientID %>').selectedIndex == "0")
{
alert("Please select \"payment method\".");
document.getElementById('<%= lstPaymentOptions.ClientID %>').focus();
return (false);
}
if (aForgotPwd.style.display != null && aForgotPwd.style.display.toString() != "none") {
var emailEle = document.getElementById("<%= txtEmail.ClientID %>");
emailEle.focus();
return false;
}
if(document.getElementById('<%= txtEmail.ClientID %>').value=="")
{
alert("Please enter a value in the field \"Email\".");
document.getElementById('<%= txtEmail.ClientID %>').focus();
return (false);
}
validemail=0;
var checkStr = document.getElementById('<%= txtEmail.ClientID %>').value;
for (i = 0; i < checkStr.length; i++)
{
if(checkStr.charAt(i)=="@")
validemail |= 1;
if(checkStr.charAt(i)==".")
validemail |= 2;
}
if(validemail != 3)
{
alert("Please enter a valid email address.");
document.getElementById('<%= txtEmail.ClientID %>').focus();
return (false);
}
if(document.getElementById('<%= txtFirstName.ClientID %>').value=="")
{
alert("Please enter a value in the field \"First Name\".");
document.getElementById('<%= txtFirstName.ClientID %>').focus();
return (false);
}
if(document.getElementById('<%= txtLastName.ClientID %>').value=="")
{
alert("Please enter a value in the field \"Last Name\".");
document.getElementById('<%= txtLastName.ClientID %>').focus();
return (false);
}</script>
<asp:Panel runat="server" DefaultButton="btnContinue">
<div class="billing-row">
<div class="cart-process-image"><img alt="" src="images/list_tick.gif"/></div>
<div class="cart-process-text">Shopping Cart</div>
<div class="cart-process-image"><img alt="" src="images/rightArrow.jpg"/></div>
<div class="cart-process-text"><strong>Personal and Shipping Details</strong></div>
<div class="cart-process-image"><img alt="" src="images/rightArrow.jpg"/></div>
<div class="cart-process-text">Payment Details</div>
</div>
<div class="billing-column-left">
<div class="billing-holder">
<div class="billing-row">
<p><strong>Payment Method</strong></p>
<div class="billing-column-mandatory">*</div>
<div class="billing-column-label">How would you like to pay?</div>
<div class="billing-column-textbox"><asp:DropDownList ID="lstPaymentOptions" runat="server" AppendDataBoundItems="True" CssClass="drop-down-list"></asp:DropDownList></div>
<div><asp:RequiredFieldValidator ID="paymentValidator" runat="server"
ControlToValidate="lstPaymentOptions" ErrorMessage="Please select a payment method" ForeColor="Red" InitialValue="Please Select">
</asp:RequiredFieldValidator></div>
</div>
</div>
<div class="billing-row">
</div>
<div class="billing-holder">
<p><strong>Your Contact Details</strong></p>
<div class="billing-row">
<div class="billing-column-mandatory"> </div>
<div class="billing-column-label">Company / Account Name: </div>
<div class="billing-column-textbox"><asp:TextBox name="txtAccountName" ID="txtAccountName" MaxLength="60" Width="270" runat="server" CssClass="textbox"></asp:TextBox></div>
</div>
<div class="billing-row">
<div class="billing-column-mandatory">*</div>
<div class="billing-column-label">Email: <asp:RequiredFieldValidator ID="emailValidator" runat="server"
ControlToValidate="txtEmail" ErrorMessage=" Required" ForeColor="Red">
</asp:RequiredFieldValidator></div>
<div class="billing-column-textbox"><asp:TextBox ID="txtEmail" MaxLength="60"
Width="270" runat="server" CssClass="textbox" AutoPostBack="True"></asp:TextBox><b><a id="aForgotPwd" href="/forgotten-password.aspx" style="display:none"> We have this email address already in our database. Click here to retrieve password?</a></b></div>
</div>
<div class="billing-row">
<div class="billing-column-mandatory">*</div>
<div class="billing-column-label">First Name: <asp:RequiredFieldValidator ID="firstNameValidator" runat="server"
ControlToValidate="txtFirstName" ErrorMessage=" Required" ForeColor="Red">
</asp:RequiredFieldValidator></div>
<div class="billing-column-textbox"><asp:TextBox name="txtFullName" ID="txtFirstName" MaxLength="30" Width="270" runat="server" CssClass="textbox"></asp:TextBox></div>
</div>
<div class="billing-row">
<div class="billing-column-mandatory">*</div>
<div class="billing-column-label">Last Name: <asp:RequiredFieldValidator ID="lastNameValidator" runat="server"
ControlToValidate="txtLastName" ErrorMessage=" Required" ForeColor="Red">
</asp:RequiredFieldValidator></div>
<div class="billing-column-textbox"><asp:TextBox name="txtFullName" ID="txtLastName" MaxLength="30" Width="270" runat="server" CssClass="textbox"></asp:TextBox></div>
</div>
<div class="billing-holder">
<p><strong>Additional Information relating to this order.</strong></p>
<div class="billing-column-textfield"><asp:TextBox TextMode="MultiLine" Width="463" Height="212" runat="server" ID="txtAdditionalInfo" CssClass="textbox"></asp:TextBox></div>
</div>
</div>
<asp:Panel ID="pnlVerticalResponse" runat="server" Visible="false">
<div class="billing-oos-background">
<div class="billing-row">
<asp:Label ID="lblSubscribe" runat="server" Text="<p><strong>You are not subscribed to our Newsletter:</strong>"></asp:Label></div>
<div class="billing-row"><asp:CheckBox ID="chkSubscribe" runat="server" /> I would like to receive information and promotional material from Global PC</div></div>
</asp:Panel>
<asp:Panel ID="pnlOutOfStockBlurb" runat="server" Visible="false" >
<div class="billing-oos-background"><div class="billing-row"><asp:Label ID="lblOutOfStockMessage" runat="server" Text="<strong>Items out of Stock:</strong><p>You have ordered one or more items that are currently out of stock. Normal procedure is for Global PC to hold the order until all items are in stock and ship entire order at once. However, if you wish you can elect to have your order split into two shipments with the out of stock items arriving at a later date. Would you like your order split into two shipments?</p>"></asp:Label></div>
<div class="billing-row"><asp:RadioButtonList ID="radlistSplit" runat="server" CellSpacing="5" AutoPostBack="true" CausesValidation="True" OnSelectedIndexChanged="radlistSplit_SelectedIndexChanged" CssClass="textbox" Borderwidth="0px"><asp:ListItem Value="0" Text="Yes, I want to recieve my order as two separate deliveries"></asp:ListItem><asp:ListItem Value="1" Text="No, I want to wait and receive all my items at once"></asp:ListItem></asp:RadioButtonList>
<asp:RequiredFieldValidator ID="splitvalidator" runat="server"
ControlToValidate="radlistSplit" ErrorMessage="Please select one Shipping Option" ForeColor="Red">
</asp:RequiredFieldValidator>
</div></div></asp:Panel>
<div class="billing-row">
<div class="billing-button-cart">
<div class="green-button">
<a href="cart.aspx">Back To Cart</a>
</div>
</div>
<div class="billing-button-checkout">
<div class="green-button">
<asp:linkButton text="Checkout" OnClientClick="return validateForm();" runat="server" ID="btnContinue" />
</div>
</div>
</div>
</asp:Panel>
</asp:Content>
VB.NET
Imports DataAccessLayer
Imports System.Net
Imports System.Data
Imports System.Net.Mail
Imports com.verticalresponse.api
Partial Class billing_details
Inherits System.Web.UI.Page
Protected c As GPCUser
Dim isMember As Boolean = False
Dim beMember As Boolean = False
Shared exists As Boolean = False
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Master.Page.Title += " - Checkout"
Dim listID As Integer
Dim sessionID As Integer
Dim VRUser As New VRAPI()
Dim newSession As New loginArgs()
newSession.username = "******@********.co.nz"
' Your VerticalResponse username
newSession.password = "**********"
'Your VerticalResponse password
' objLA.impersonate_user = "subaccount@emailaddress.com"; // If accessing or acting as a subaccount, uncomment this and replace it with the applicable email address.
newSession.session_duration_minutes = "120"
Dim [date] As DateTime = DateTime.Now
listID = 284662333
If TypeOf Session("Customer") Is GPCUser Then
c = CType(Session("Customer"), GPCUser)
Else
c = New GPCUser
End If
If c.CartObjects.Count <= 0 Then
Response.Redirect("cart.aspx")
End If
If Not Page.IsPostBack Then
' Check shipping to see if delivery details need to be displayed
If c.ShippingMethodName Like "*Pick-Up*" Then
pnlShippingDetails.Visible = False
End If
'Check if customer has ordered out of stock items
If c.intOutOfStockItems >= 1 Then
pnlOutOfStockBlurb.Visible = True
Else
pnlOutOfStockBlurb.Visible = False
End If
txtEmail.Attributes.Add("onblur", CStr(IIf(c.AccountNo > 0, "", "CallMe(this.id,this.id);")))
lstPaymentOptions.DataSource = SqlHelper.ExecuteDataset(System.Configuration.ConfigurationManager.AppSettings("dbConn"), "xw_GetPaymentTypes").Tables(0)
lstPaymentOptions.DataTextField = "PTDESC"
lstPaymentOptions.DataValueField = "PTNO"
lstPaymentOptions.Items.Insert(0, "Please Select")
'lstPaymentOptions.DataBind()
If c.CustomerID > 0 Then
'populate the table
txtAccountName.Text = c.AccountName
txtFirstName.Text = c.FirstName
txtLastName.Text = c.LastName
txtEmail.Text = c.Email
txtAddress.Text = c.Address
txtCityTown.Text = c.City
txtSuburb.Text = c.Suburb
txtPostcode.Text = c.PostCode
txtPhone.Text = c.Phone
txtMobile.Text = c.Mobile
Try
sessionId = VRUser.login(newSession)
Catch ex As System.Exception
'lblMessage.Text = ex.ToString()
End Try
Dim getMember As New getListMemberByEmailAddressArgs()
getMember.session_id = sessionId
getMember.list_id = listID
getMember.email_address = txtEmail.Text
Try
VRUser.getListMemberByEmailAddress(getMember)
isMember = True
pnlVerticalResponse.Visible = False
Catch ex As System.Exception
isMember = False
pnlVerticalResponse.Visible = True
End Try
If (isMember = False) Then
pnlVerticalResponse.Visible = True
End If
Dim dt As Data.DataTable = GPCUser.GetAccount(c.AccountNo)
If dt IsNot Nothing Then
If dt.Rows.Count > 0 Then
Dim dr As Data.DataRow = dt.Rows(0)
If dr("CREDITSTATUS") > "0" And dr("STOPCREDIT") = "N" And dr("CREDLIMIT") > "0" Then
lstPaymentOptions.Items.Remove("Please Select")
lstPaymentOptions.Items.Insert(0, New ListItem("My Global PC Account", "99"))
lstPaymentOptions.Items.Insert(0, "Please Select")
End If
End If
End If
dt.Dispose()
End If
End If
End Sub
'RadioButtons to set whether customer wants split shipping
Protected Sub radlistSplit_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles radlistSplit.SelectedIndexChanged
If radlistSplit.SelectedIndex = "0" Then
c.Instructions = "**CUSTOMER HAS SELECTED SPLIT SHIPPING**"
ElseIf radlistSplit.SelectedIndex = "1" Then
c.Instructions = ""
End If
End Sub
Protected Sub btnContinue_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnContinue.Click
If TypeOf Session("Customer") Is GPCUser Then
c = CType(Session("Customer"), GPCUser)
Else
Exit Sub
End If
If chkSubscribe.Checked = True Then
Dim listID As Integer = 284662333
Dim isMember As Boolean = False
Dim newSession As New loginArgs()
newSession.username = "austin@globalpc.co.nz"
' Your VerticalResponse username
newSession.password = "global2012"
'Your VerticalResponse password
' objLA.impersonate_user = "subaccount@emailaddress.com"; // If accessing or acting as a subaccount, uncomment this and replace it with the applicable email address.
newSession.session_duration_minutes = "120"
Dim [date] As DateTime = DateTime.Now
' This is generated by creating a Service Reference that points to the VerticalResponse WSDL.
Dim VRUser As New VRAPI()
' Let's try to log in. The login call will return a session ID, which we will use in all subsequent calls.
Dim sessionId As String = Nothing
Try
sessionId = VRUser.login(newSession)
Catch ex As System.Exception
txtAdditionalInfo.Text = ex.ToString()
Exit Sub
End Try
Dim getMember As New getListMemberByEmailAddressArgs()
getMember.session_id = sessionId
getMember.list_id = listID
getMember.email_address = txtEmail.Text
Try
VRUser.getListMemberByEmailAddress(getMember)
isMember = True
Catch ex As System.Exception
isMember = False
End Try
If (isMember = False) Then
Dim nMember As New ListMember()
nMember.list_id = listID
Dim memberData As NVPair() = New NVPair(2) {}
memberData(0) = New NVPair()
memberData(0).name = "email_address"
memberData(0).value = txtEmail.Text
memberData(1) = New NVPair()
memberData(1).name = "first_name"
memberData(1).value = txtFirstName.Text
memberData(2) = New NVPair()
memberData(2).name = "last_name"
memberData(2).value = txtLastName.Text
nMember.member_data = memberData
Dim objAL As New addListMemberArgs()
objAL.list_member = nMember
objAL.session_id = sessionId
Try
VRUser.addListMember(objAL)
Catch ex As System.Exception
txtAdditionalInfo.Text = ex.ToString()
Exit Sub
End Try
Else
End If
End If
c.PaymentType = lstPaymentOptions.SelectedValue
c.CustomerOrderNo = txtOrderNumber.Text
c.Instructions += txtAdditionalInfo.Text
c.CreateCustomerDetails(txtAccountName.Text, txtFirstName.Text, txtLastName.Text, txtEmail.Text, txtAddress.Text, txtSuburb.Text, txtCityTown.Text, txtPostcode.Text, txtPhone.Text, txtMobile.Text, lstCountry.SelectedValue)
c.AddShippingDetails(txtShippingFullName.Text, txtShippingAddress.Text, txtShippingCityTown.Text, txtShippingSuburb.Text, txtShippingPostcode.Text, lstShippingCountry.SelectedValue)
If c.CustomerID = 0 Then
Dim strPassword As String = ""
If c.GeneratedPassword <= "" Then
strPassword = UCase(RandomPassword.Generate(8, 8))
c.GeneratedPassword = strPassword
Else
strPassword = c.GeneratedPassword
End If
GPCUser.AddUpdateCustomer(c)
Dim dt As DataTable = GPCUser.GetUser(c.Email, strPassword)
If Not dt Is Nothing Then
If dt.Rows.Count > 0 Then
c.UpdateUser(dt.Rows(0)("CustID"))
Dim obj As Object = Session("Customer")
Session("Customer") = c
Else
End If
Else
End If
Session("Customer") = c
End If
SendUpdateAccountEmailMessage(c.EmailCount)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Response.Redirect("payment-details.aspx")
End Sub
'Email Validation
<System.Web.Services.WebMethod()> _
Public Shared Function ValidateEmail(email As String) As String
Dim wbClient As WebClient = New WebClient()
Dim strUrl As String = ConfigurationManager.AppSettings("WebsiteURLFull") + "/ajax/check_email_address.aspx?Email=" + email
Dim reqHTML As Byte()
reqHTML = wbClient.DownloadData(strUrl)
Dim objUTF8 As UTF8Encoding = New UTF8Encoding()
Dim output As String = objUTF8.GetString(reqHTML)
If String.IsNullOrEmpty(output) Then Return String.Empty
Dim c As GPCUser
If TypeOf HttpContext.Current.Session("Customer") Is GPCUser Then
c = CType(HttpContext.Current.Session("Customer"), GPCUser)
exists = False
If c.AccountNo > 0 Then
exists = True
End If
Return ""
End If
Return output
End Function
'Method to send an email from GlobalPC
Private Sub SendMessage(fromEmail As String, fromEmailName As String, _
toEmails As String(), IsBodyHtml As Boolean, message As String, subject As String)
Dim mail As MailMessage = New MailMessage
mail.From = New MailAddress(fromEmail, fromEmailName)
For Each toEmail As String In toEmails
mail.To.Add(New MailAddress(toEmail))
Next
mail.Bcc.Add(fromEmail)
mail.IsBodyHtml = IsBodyHtml
mail.Subject = subject
mail.Body = message
Dim s As New SmtpClient(System.Configuration.ConfigurationManager.AppSettings("MailServer"))
s.Send(mail)
End Sub
'Sends email to GlobalPC if customer updates account details.
Private Sub SendUpdateAccountEmailMessage(emailCount As Integer)
Dim subject As String = "ALERT : Website user has updated his details"
Dim message As String
message &= "Account number " & c.AccountNo & " with email address " & c.Email & " has updated his account. Via page billing-details" & vbCrLf & vbCrLf
message += "Account Name : " & txtAccountName.Text & vbCrLf
message += "First Name : " & txtFirstName.Text & vbCrLf
message += "Last Name : " & txtLastName.Text & vbCrLf
message += "Email : " & txtEmail.Text & vbCrLf
message += "Address : " & txtAddress.Text & vbCrLf
message += "Suburb : " & txtSuburb.Text & vbCrLf
message += "City Town : " & txtCityTown.Text & vbCrLf
message += "Country : " & lstCountry.SelectedValue & vbCrLf
message += "Postcode : " & txtPostcode.Text & vbCrLf
message += "Phone : " & txtPhone.Text & vbCrLf
message += "Mobile : " & txtMobile.Text & vbCrLf
message += vbCrLf & vbCrLf
message += "Shipping Information" & vbCrLf
message += "txtShippingFullName.Text : " & txtShippingFullName.Text & vbCrLf
message += "txtShippingAddress.Text : " & txtShippingAddress.Text & vbCrLf
message += "txtShippingCityTown.Text : " & txtShippingCityTown.Text & vbCrLf
message += "txtShippingSuburb.Text : " & txtShippingSuburb.Text & vbCrLf
message += "txtShippingPostcode.Text : " & txtShippingPostcode.Text & vbCrLf
message += "lstShippingCountry.SelectedValue : " & lstShippingCountry.SelectedValue & vbCrLf
message += vbCrLf & vbCrLf
message += "More Information" & vbCrLf
message += "Order No: " & c.CustomerOrderNo & vbCrLf
message += "Payment Type: " & c.PaymentType & vbCrLf
message += "Instructions: " & c.Instructions & vbCrLf
message += vbCrLf & vbCrLf
message += "Regards" & vbCrLf & vbCrLf & "GlobalPC Admin Team"
SendMessage(ConfigurationManager.AppSettings("AccountDetailsUpdateEmail"), "Global PC", _
New String() {ConfigurationManager.AppSettings("AccountDetailsUpdateEmail")}, False, message, subject)
End Sub
Protected Sub txtEmail_TextChanged(sender As Object, e As System.EventArgs) Handles txtEmail.TextChanged
Dim listID As Integer = 284662333
Dim isMember As Boolean = False
Dim newSession As New loginArgs()
newSession.username = "austin@globalpc.co.nz"
' Your VerticalResponse username
newSession.password = "global2012"
'Your VerticalResponse password
' objLA.impersonate_user = "subaccount@emailaddress.com"; // If accessing or acting as a subaccount, uncomment this and replace it with the applicable email address.
newSession.session_duration_minutes = "120"
Dim [date] As DateTime = DateTime.Now
' This is generated by creating a Service Reference that points to the VerticalResponse WSDL.
Dim VRUser As New VRAPI()
' Let's try to log in. The login call will return a session ID, which we will use in all subsequent calls.
Dim sessionId As String = Nothing
Try
sessionId = VRUser.login(newSession)
Catch ex As System.Exception
'lblMessage.Text = ex.ToString()
End Try
Dim getMember As New getListMemberByEmailAddressArgs()
getMember.session_id = sessionId
getMember.list_id = listID
getMember.email_address = txtEmail.Text
Try
VRUser.getListMemberByEmailAddress(getMember)
isMember = True
pnlVerticalResponse.Visible = False
Catch ex As System.Exception
isMember = False
pnlVerticalResponse.Visible = True
End Try
End Sub
Protected Sub chkSubscribe_CheckedChanged(sender As Object, e As System.EventArgs) Handles chkSubscribe.CheckedChanged
If chkSubscribe.Checked = True Then
beMember = True
Else
beMember = False
End If
End Sub
End Class
答案 0 :(得分:1)
根据此处的当前地址查看电子邮件
'Email Validation
<System.Web.Services.WebMethod()> _
Public Shared Function ValidateEmail(email As String) As String
Dim wbClient As WebClient = New WebClient()
Dim strUrl As String = ConfigurationManager.AppSettings("WebsiteURLFull") + "/ajax/check_email_address.aspx?Email=" + email
Dim reqHTML As Byte()
reqHTML = wbClient.DownloadData(strUrl)
Dim objUTF8 As UTF8Encoding = New UTF8Encoding()
Dim output As String = objUTF8.GetString(reqHTML)
If String.IsNullOrEmpty(output) Then Return String.Empty
Dim c As GPCUser
If TypeOf HttpContext.Current.Session("Customer") Is GPCUser Then
c = CType(HttpContext.Current.Session("Customer"), GPCUser)
exists = False
If c.AccountNo > 0 Then
exists = True
End If
Return ""
End If
所以存在是一个变量,它告诉你地址是否匹配。
尝试添加到Page_Load方法
If Page.IsPostBack Then
If exists Then
btnContinue.enabled = false
End If
End If
当点击按钮后页面被回发到服务器时,这将检查是否存在是否为true以及是否禁用该按钮。
P.S。我会更改要使用的用户名/密码 ConfigurationManger.Appsettings并将您的用户名放在web.config中。