我有一个使用ASP.NET MVC和C#的单页Web应用程序,控制器代码如下所示。
它只有两个控制器,一个获取索引操作和一个后接触操作。联系人操作适用于我页面底部的联系表单。
以下是发生的事情。当页面运行时,ViewBag.Contact会显示在我的联系表单的标题上。当我提交表格和POST时,查看包保持不变。我假设这是因为我的联系人控制器没有返回View()但返回Redirect(“#Contact”)
我需要使用Redirect,因此页面似乎不会移动或更改,除非在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("FakeEmail@gmail.com", "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("SendingEmail@gmail.com");
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");
}
}
}
答案 0 :(得分:1)
答案是否:
ViewBag
。ViewBag
并在同一页面上显示。 ViewBags
为一个请求设置并生效,因此,如果您在页面中(或在其后面的控制器中)设置ViewBag
,则可以在您发出其他HTTP请求时显示它(打开另一个页面或刷新当前页面。)
您可以通过其他方式(Ajax,Javascript,PartialViews)完成您的需求
答案 1 :(得分:0)
您正在寻找的是如何渲染“局部视图”。您将最终使用AJAX和JS,但是如果您只想进行部分页面重新加载,但框架可以为您构建大部分内容。以下是一些很好的例子:
http://cmatskas.com/update-an-mvc-partial-view-with-ajax/
http://forums.asp.net/t/1883187.aspx?How+to+update+Partial+View+with+doing+a+submit