2012-01-31 75 views
0

很抱歉,如果這已被解決。我只是無法讓它工作。我有一個電子郵件聯繫表格。我的表單工作正常。它正在發送一封電子郵件。但是,提交表單後,我要麼彈出消息要麼將其重定向到不同的頁面,表示他們的電子郵件已成功發送,我們會盡我們所能做出迴應。我試過RedirectActionTo和其他一些東西,但我無法讓它工作。這是我的代碼。ASP.NET電子郵件表格提交表格後返回消息

 public ActionResult ContactForm(ContactModel emailModel) 
    {    
      MailMessage oMail = new MailMessage(); 

      oMail.From = new MailAddress("[email protected]", "Web Contact Form"); 
      oMail.To.Add("[email protected]"); 
      oMail.Subject = emailModel.Subject; 
      string body = "Name: " + emailModel.Name + "\n" 
         + "Email: " + emailModel.Email + "\n" 
         + "Website: " + emailModel.Website + "\n" 
         + "Phone: " + emailModel.Phone + "\n\n" 
         + emailModel.Message; 

      oMail.Body = body; 

      if (SendMessage(oMail)) 
      { 
       return RedirectToAction("Message"); 
      } 
      else 
      { 
       return RedirectToAction("Error"); 
      } 
      return View(); 
    } 
    private bool SendMessage(MailMessage oMail) 
    { 
     SmtpClient client = new SmtpClient("relay-hosting.secureserver.net"); 
     client.Credentials = new NetworkCredential("[email protected]", "********", "domaion.com"); 
     try 
      { 
       client.Send(oMail); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       this.exception = ex; 
       return false; 
      } } 

} 

感謝您的幫助。

+0

@Bill馬丁。好消息是,RedirectToAction的返回工作,有點。它將我重定向到確認頁面。但是,它立刻給了我一個輸入信息的機會。 – 2012-01-31 21:20:27

+0

我已經更新了我的代碼 – 2012-02-06 17:48:46

回答

0

的原因是因爲動作沒有完成等待結果。

public class ContactModel 
     { 
      public string Name { get; set; } 
      public string Email { get; set; } 
      public string Website { get; set; } 
      public string Phone { get; set; } 
      public string Message { get; set; } 
      public string Subject { get; set; } 
     } 

     public ActionResult Index() 
     { 
      ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

      ContactModel model = new ContactModel(); 
      model.Email = "[email protected]"; 
      model.Message = "message"; 
      model.Name = "name"; 
      model.Subject = "subject"; 
      model.Website = "http://test.com"; 
      ContactForm(model); 

      return View(); 
     } 

     /// <summary> 
     /// Contacts the form. 
     /// </summary> 
     /// <returns>Returns view to display the form and fill</returns> 
     [AcceptVerbs(HttpVerbs.Get)] 
     public ActionResult ContactForm() 
     { 
      return View(new ContactModel()); 
     } 

     /// <summary> 
     /// Contacts the form. 
     /// If model is valid we will go ahead and process emailing 
     /// </summary> 
     /// <param name="emailModel">The email model.</param> 
     /// <returns></returns> 
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult ContactForm(ContactModel emailModel) 
     { 
      if (ModelState.IsValid) 
      { 

       MailMessage oMail = new MailMessage(); 

       oMail.From = new MailAddress("[email protected]", "Web Contact Form"); 
       oMail.To.Add("[email protected]"); 
       oMail.Subject = emailModel.Subject; 
       string body = "Name: " + emailModel.Name + "\n" 
           + "Email: " + emailModel.Email + "\n" 
           + "Website: " + emailModel.Website + "\n" 
           + "Phone: " + emailModel.Phone + "\n\n" 
           + emailModel.Message; 

       oMail.Body = body; 

       if (SendMessage(oMail)) 
       { 
        return RedirectToAction("Message"); 
       } 
       else 
       { 
        return RedirectToAction("Error"); 
       } 
      } 
      else 
      { 
       return View(emailModel); 
      } 
     } 

     /// <summary> 
     /// Sends the message. 
     /// </summary> 
     /// <param name="oMail">The o mail.</param> 
     /// <returns>Boolean success.</returns> 
     private bool SendMessage(MailMessage oMail) 
     { 
      SmtpClient client = new SmtpClient("relay-hosting.secureserver.net"); 
      client.Credentials = new NetworkCredential("[email protected]", "********", "domaion.com"); 
      try 
      { 
       client.Send(oMail); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       this.exception = ex; 
       return false; 
      } 
     } 

該視圖重定向,因爲我猜你的要求不是分體式:

這裏後,你的控制器,你可以設置你的反應,如簡化我的實現

版本通過該方法。因此它會直接重定向。

,這是通過

完成的[AcceptVerbs(Http.Get)]或的[AcceptVerbs(Http.Post)]

希望這有助於

要傳遞信息:

TemData["message"] = "pass message between controllers like this" 

public AcionResult M essage(string message){//這裏選擇 ViewData [「message」] = TempData [「message」];

return View(); }

return RedirectToAction("Message", new{message = "pass message between controllers"}); 
`enter code here` where 
public AcionResult Message(string message){ 
//or if you are using parameter 
ViewData["message"] = message; 


return View(); 
} 
+0

對不起,我對mvc上的表單代碼有點新了。我瞭解你的代碼。雖然我有幾個問題。 「//創建客戶端」之後,我需要什麼嗎?並且在「//設置所有你需要的東西」之後,這就是我放置郵件的地方,但是我需要「MailMessage oMail = new System.Web.Mail.MailMessage();」 – 2012-02-03 15:33:51

+0

@LarsHovden:查看我的更新回答 – cpoDesign 2012-02-04 11:09:21

+0

對不起,遲到的回覆,剛剛從週末回來。快速提問。我有一個錯誤,「this.exception = ex;」異常不包含定義。我該如何糾正? – 2012-02-06 17:19:53

0

你的IIS設置不正確的,這也是過時的,你應該使用System.Net.Mail.SmtpClient而是看SocttGu's blog後它