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