从单选按钮&中传递参数复选框,使用HTML页面的电子邮件

时间:2011-03-21 12:08:08

标签: asp.net html vb.net

我有一个HTML表单,它包含一些字符串问题,一个单选按钮和一个复选框问题。填写表单后,信息将传递到aspx页面,该页面会发送包含该信息的电子邮件。我能够将字符串问题传递给电子邮件,但是在传递单选按钮答案时遇到问题,复选框回答了aspx,然后回复了电子邮件。我有HTML集的代码,我需要帮助ASPX页面的代码。(它是VB)这是我到目前为止的代码。

HTML

<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>

ASPX

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

1 个答案:

答案 0 :(得分:0)

首先,让我向您介绍StringBuilder,它使代码更容易阅读。

其次,单选按钮将像常规文本字段一样作为普通名称/值对进行,因此您可以以相同的方式处理它们。无论你在HTML端的value放置什么,都会提交你所拥有的内容,以及你所拥有的内容。我建议您确保name值都使用相同的大小写。在ASPX方面,你应该没问题但是假设某些事情可能区分大小写是一种很好的做法。 (您现在有P1p1。)您可能还希望默认选中一个单选按钮,可能是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控件。