我有一个HTML表单,它包含一些字符串问题,一个单选按钮和一个复选框问题。填写表单后,信息将传递到aspx页面,该页面会发送包含该信息的电子邮件。我能够将字符串问题传递给电子邮件,但是在传递单选按钮答案时遇到问题,复选框回答了aspx,然后回复了电子邮件。我有HTML集的代码,我需要帮助ASPX页面的代码。(它是VB)这是我到目前为止的代码。
<form id="form" method="post" action="SendEmail.aspx" enctype="multipart/form-data" name="questions">
<div class="Qblock">Name: <input type="text" class="input" value="" name="contact_name" /></div>
<div class="Qblock">Phone #: <input type="text" class="input" value="" name="contact_phone" /></div>
<div class="Qblock">E-Mail: <input type="text" class="input" value="" name="contact_email" /></div>
<div class="Qblock">How many years have you been in this industry?<input type="text" class="input" value="" name="contact_long" /></div>
<div class="Qblock">What is your specialty?<input type="text" class="input" value="" name="contact_special" /></div>
<div class="Qblock">Do you have a cell phone?
<input type="radio" name="P1" value="Yes" /> Yes <input type="radio" name="p1" value="No" /> No <br /></div>
<div class="Qblock">Can you do any of the following? (check all that apply)<br />
<input type="checkbox" name="ckBox" value="CustSer" /> Handle Customer Service<br />
<input type="checkbox" name="ckBox" value="ReadForm" /> Read Expense Reports<br />
<input type="checkbox" name="ckBox" value="NewCust" /> Sign Up New Customers<br /></div>
Protected Sub RetrieveValues()
Dim sTemp As String = String.Empty
sFromName = "asMark@gmail.com"
sToName = "asMarkContent@gmail.com"
sSubject = "Web - Contact Us Inquiry"
sTemp = String.Format("{0}{1}{2}", "<<< Marketing Opportunities >>>", vbCrLf, vbCrLf)
sTemp = String.Format("{0}{1}{2}{3}", sTemp, "Name: ", Request.Params("contact_name"), vbCrLf)
sTemp = String.Format("{0}{1}{2}{3}", sTemp, "Phone: ", Request.Params("contact_phone"), vbCrLf)
sTemp = String.Format("{0}{1}{2}{3}", sTemp, "Email: ", Request.Params("contact_email"), vbCrLf)
sTemp = String.Format("{0}{1}{2}{3}", sTemp, "How many years have you been in this industry? ", Request.Params("contact_long"), vbCrLf)
sTemp = String.Format("{0}{1}{2}{3}", sTemp, "What is your specialty? ", Request.Params("contact_special"), vbCrLf)
End Sub
答案 0 :(得分:0)
首先,让我向您介绍StringBuilder,它使代码更容易阅读。
其次,单选按钮将像常规文本字段一样作为普通名称/值对进行,因此您可以以相同的方式处理它们。无论你在HTML端的value
放置什么,都会提交你所拥有的内容,以及你所拥有的内容。我建议您确保name
值都使用相同的大小写。在ASPX方面,你应该没问题但是假设某些事情可能区分大小写是一种很好的做法。 (您现在有P1
和p1
。)您可能还希望默认选中一个单选按钮,可能是no
。如果你没有,并且有人在没有检查的情况下填写表格,那么该字段的电子邮件将是空的。
复选框将以逗号分隔列表的形式出现,因此如果有人检查所有三个选项,您将获得字符串CustSer, ReadForm, NewCust
。您可能希望为这些值提供更具描述性的值,但这取决于您。但您可以像处理任何其他表单字段一样处理复选框,只需按名称使用它。
Protected Sub RetrieveValues()
Dim sTemp As New System.Text.StringBuilder()
sTemp.AppendFormat("{0}{1}{1}", "<<< Marketing Opportunities >>>", vbCrLf)
sTemp.AppendFormat("{0}{1}{2}", "Name: ", Request.Params("contact_name"), vbCrLf)
sTemp.AppendFormat("{0}{1}{2}", "Phone: ", Request.Params("contact_phone"), vbCrLf)
sTemp.AppendFormat("{0}{1}{2}", "Email: ", Request.Params("contact_email"), vbCrLf)
sTemp.AppendFormat("{0}{1}{2}", "How many years have you been in this industry? ", Request.Params("contact_long"), vbCrLf)
sTemp.AppendFormat("{0}{1}{2}", "What is your specialty? ", Request.Params("contact_special"), vbCrLf)
sTemp.AppendFormat("{0}{1}{2}", "Do you have a cell phone? ", Request.Params("P1"), vbCrLf)
sTemp.AppendFormat("{0}{1}{2}", "Can you do any of the following? ", Request.Params("ckBox"), vbCrLf)
End Sub
最后,我建议使用Request.Form
而不是Request.Params
。如果有人转到您的页面并手动将任何表单字段添加到查询字符串中,则表单字段本身将被忽略。例如,如果他们导航到Form.aspx?contact_name=Bob Dole
并在名称字段中填写Bob Smith
,您会在服务器端看到Bob Dole
。这是因为在表单字段之前搜索查询字符串。在这种情况下,它并不重要,但在未来的形式中,某些恶意网站可能链接到您的网站并将奇怪的值传递给表单。我建议只使用Request.Form和Request.QueryString。
好的,最后一段是“最后一段”所以我想这是“还有一件事”。您使用的方法只是ASP.Net的一半。你所拥有的更多是从ASP classic / PHP到.Net的转换。这根本没有错,但你缺少ASP.Net网页控件的全部功能。我的写作方式比我能写的要多,但要给你一个想法,你会替换:
<input type="text" class="input" value="" name="contact_special" />
使用:
<asp:Textbox runat="server" id="contact_special" />
这将允许您使用RequiredFieldValidator
,它将同时使用javascript和服务器端代码来确保填写该字段:
<asp:RequiredFieldValidator runat="server" ControlToValidate="contact_special" ErrorMessage="Required" />
不要对此表单进行此更改,但是我会鼓励您调查Web控件。