2014-10-30 29 views
1

我有一個使用ASP.NET MVC和C#的單頁網頁應用程序,控制器代碼如下所示。如何在POST後獲取ViewBag更改?

它只有兩個控制器,一個獲取索引動作和一個接觸後動作。聯繫行動是針對我在頁面底部的聯繫表單。

這是發生了什麼事。當頁面運行ViewBag.Contact時,它會顯示我的聯繫表單的標題。當我提交表格和POST時,視圖保持不變。我假設這是因爲我的聯繫人控制器沒有返回視圖(),但返回重定向(「#聯繫」)

我需要重定向,以便頁面看起來不會移動或更改任何地方,除了ViewBag.Contact作爲標題。

如果我使用了返回View(),我可以讓ViewBag工作。但是,它會從頁面的頂部再次加載頁面,而不是頁面所在的底部,以使頁面看起來沒有重新加載。

我的問題是,有沒有辦法讓ViewBag工作,無需重新加載頁面或從用戶位於窗體的位置移動?

(我知道我可以如與其他腳本完成這個JavaScript,但我想用C#ASP.Net儘可能)

謝謝

namespace MySite.MVC.Controllers 
{ 
    public class HomeController : Controller 
    {    
     public ActionResult Index() 
     { 
      ViewBag.Contact = "SEND ME AN EMAIL BY FILLING OUT THE FORM"; 
      return View();        
     }      

     [HttpPost] 
     public ActionResult Contact(ContactModels c) 
     {     
      if (ModelState.IsValid) 
      {  
       using (var client = new SmtpClient("smtp.gmail.com", 587)) 
       { 
        client.EnableSsl = true; 
        client.UseDefaultCredentials = false; 
        client.Credentials = new NetworkCredential("[email protected]", "password"); 

        string body = string.Format(
         "First Name: {0}\nLast Name: {1}\nEmail: {2}\nComment: {3}", 
         c.FirstName, 
         c.LastName, 
         c.Email, 
         c.Comment 
        ); 

        var message = new MailMessage(); 
        message.To.Add("[email protected]"); 
        message.From = new MailAddress(c.Email, c.Name); 
        message.Subject = String.Format("Contact Request From: {0} ", c.Name); 
        message.Body = body; 
        message.IsBodyHtml = false; 
        try 
        { 
         client.Send(message); 
        } 
        catch (Exception) 
        { 
         return View("Error"); 
        }  
       }      
      } 

      ViewBag.Contact = "THANKS, I'VE RECEIVED YOUR MESSAGE"; 
      return Redirect("#Contact");     
     } 
    } 
} 

回答

1

答案是沒有

  • 你不能沒有重新加載頁面更新ViewBag
  • 您無法更新ViewBag並在同一頁面上顯示它。

ViewBags設置和生活的一個要求,所以,如果你設置了ViewBag在頁面(或在它後面的控制器),你能證明它,如果你再拍HTTP請求(打開另一個頁面或刷新目前的一個)。

你可以通過其他方式完成你所需要的東西(Ajax,Javascript,PartialViews)