ASP.NET MVC 4 AJAX.BeginForm和PartialViews

teh*_*ner 3 javascript asp.net ajax partial-views asp.net-mvc-4

我正在考虑使用AJAX.BeginForm构建SPA,但是当用户禁用JavaScript时我遇到了一个问题,而不是将他重定向到_Layout.cshtml + PartialView.cshtml,它将他重定向到PartialView.cshtml.

有没有办法在其中包含布局和部分视图(如果启用了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();
    }
Run Code Online (Sandbox Code Playgroud)

而SimpleMessage.phtml只是@ViewData ["message"];

而我的View.phtml我有条件并检查是否设置了ViewBag ["message"].如果已设置,则表示它是回发并且不显示表单而是显示消息,否则它显示表单:

Nen*_*nad 5

您可以检查是否通过Ajax调用Action,并返回不同类型的结果

public ActionResult MyAction()
{
    if(Request.IsAjaxRequest()) {
        // Html fragment
        return PartialView();
    }
    else {
        // Complete HTML page
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它是回发,你也可以传递你的模型或简单类型(int,string):

[HttpPost]
public ActionResult MyAction(Model model)
{
    if(Request.IsAjaxRequest()) {
        // Html fragment
        return PartialView(model);
    }
    else {
        // Complete HTML page
        return View(model);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:在你的具体情况下,我会这样做,但这只是我的偏好.

[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);
}
Run Code Online (Sandbox Code Playgroud)