Javascript ASP.NET MVC 4 AJAX.BeginForm和PartialView
我正在考虑使用AJAX.BeginForm构建SPA,但是当用户禁用JavaScript时,我会遇到一个问题,它不会将用户重定向到_Layout.cshtml+PartialView.cshtml,而是将用户重定向到PartialView.cshtml 是否有一种方法可以将布局和PartialView包含在其中(如果启用了JavaScript,则会出现这种情况) 谢谢 编辑: 太棒了。。谢谢我设法让它工作,但我不确定这是最好的实现Javascript ASP.NET MVC 4 AJAX.BeginForm和PartialView,javascript,asp.net,ajax,asp.net-mvc-4,partial-views,Javascript,Asp.net,Ajax,Asp.net Mvc 4,Partial Views,我正在考虑使用AJAX.BeginForm构建SPA,但是当用户禁用JavaScript时,我会遇到一个问题,它不会将用户重定向到_Layout.cshtml+PartialView.cshtml,而是将用户重定向到PartialView.cshtml 是否有一种方法可以将布局和PartialView包含在其中(如果启用了JavaScript,则会出现这种情况) 谢谢 编辑: 太棒了。。谢谢我设法让它工作,但我不确定这是最好的实现 [HttpPost] public Action
[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”]
鉴于my View.phtml,我有一个条件并检查是否设置了ViewBag[“message”]。如果设置了,则表示它是回发,不显示表单,而是显示消息,或者显示表单:您可以检查是否通过Ajax调用了操作,并返回不同类型的结果
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,该函数将如何调用?Ajax.BeginForm helper会自动处理这个问题。如果禁用javascript,它将返回正常的回发。类似的情况也发生在Ajax.ActionLink helper上,它会返回到正常的链接行为。在表单提交中,如果您返回一个PartialView并返回成功结果,这将如何工作?如果禁用JS,我是否必须为该表单的成功结果创建一个全新的视图,并在成功时返回该视图?这取决于您的用例。如果您的完整视图=(部分+布局)如您所述,那么您可以在两种情况下返回相同的(“MyAction.cshtml”)视图。我已经编辑了上面的文章,包括我的解决方案,但不太确定这是否是最好的方法。