2010-02-19 45 views
3

我正在尋找一種方法將用戶輸入的所有值發送到表單中。這是否存在於asp.net中?有沒有辦法給asp.net發送所有輸入控件的值

這裏是我的電子郵件代碼:

Dim messagemain As String = emailbody 
     Dim message As New MailMessage() 
     message.IsBodyHtml = True 
     message.From = New MailAddress("[email protected]") 
     message.To.Add(New MailAddress("[email protected]")) 
     message.Subject = ("Response from form") 
     message.Body = (messagemain) 
     Dim client As New SmtpClient() 
     client.Host = "email.foo.foo" 
     client.Send(message) 

我通常要經過人工和廣告的所有必需品的emailbody變量,然後發送,但這種形式有超過200場。

謝謝。

+2

哇,200場聽起來就像一場噩夢有人填寫 – Kane 2010-02-19 09:27:55

回答

4

您可以嘗試過於循環在Controls集合頁面,如果你找到一個文本框的值添加到郵件正文:

var body = new StringBuilder(); 
foreach (var control in pageInstance.Controls) 
{ 
    if (control is TextBox) 
    { 
     var value = ((TextBox)control).Text; 
     body.AppendFormat("value: {0}<br/>", HttpUtility.HtmlEncode(value)); 
    } 
} 
message.Body = body.ToString(); 

注:這隻會工作,如果文本框直接放置在頁面上,而不是在面板等其他容器內......爲了考慮到這一點,你可以訪問所有的控件write a recursive function

+1

記住的HTMLEncode所有的值,否則你冒着一些討厭的注入攻擊到電子郵件。 – 2010-02-19 10:45:33

+0

@丹佳點,我已更新我的帖子以反映您的建議。 – 2010-02-19 13:51:03

2

那麼,如果你需要全部值的形式,而不是手動構建它,這個migth幫助你。

var sb = new StringBuilder(); 
foreach (string key in this.Request.Form.Keys) 
    sb.AppendFormat("{0} = {1}<br/>", key, this.Request.Form[key]); 
var emailbody = sb.ToString(); 
相關問題