2014-10-30 35 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)