我有一個使用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");
}
}
}