我正在考虑使用 AJAX.BeginForm 构建 SPA,但是当用户禁用 JavaScript 时我遇到了一个问题,而不是将他重定向到 _Layout.cshtml + PartialView.cshtml,而是将他重定向到 PartialView.cshtml。 .
有没有办法在其中包含 Layout 和 PartialView(如果启用了 JavaScript,它会在哪里)?
谢谢
编辑:
太棒了..谢谢..我设法让它工作,但我不确定它是最好的实现..
[HttpPost]
public ActionResult Index(Newsletter newsletter)
{
if (ModelState.IsValid)
{
db.Newsletters.Add(newsletter);
db.SaveChanges();
ViewData["message"] = "thanks for signing up to our newsletter!";
if (Request.IsAjaxRequest())
{
return PartialView( "SimpleMessage" );
}
}
return View();
}
SimpleMessage.phtml 只是@ViewData["message"];
而我的 View.phtml 我有一个条件并检查是否设置了 ViewBag["message"] 。如果它已设置,则意味着它是一个回发并且不显示表单而是显示消息,否则它显示表单:
最佳答案
您可以检查是否通过 Ajax 调用了 Action,并返回不同类型的结果
public ActionResult MyAction()
{
if(Request.IsAjaxRequest()) {
// Html fragment
return PartialView();
}
else {
// Complete HTML page
return View();
}
}
如果是回发,您也可以传递模型或简单类型(int、string):
[HttpPost]
public ActionResult MyAction(Model model)
{
if(Request.IsAjaxRequest()) {
// Html fragment
return PartialView(model);
}
else {
// Complete HTML page
return View(model);
}
}
编辑:在您的具体情况中,我会这样做,但这只是我的偏好。
[HttpPost]
public ActionResult Index(Newsletter newsletter)
{
if (ModelState.IsValid)
{
db.Newsletters.Add(newsletter);
db.SaveChanges();
if (Request.IsAjaxRequest())
return PartialView("SimpleMessage");
else
return View("SimpleMessage")
}
if (Request.IsAjaxRequest())
return PartialView(newsletter);
else
return View(newsletter);
}
关于javascript - ASP.NET MVC 4 AJAX.BeginForm 和 PartialViews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15393474/