3

AJAX.BeginForm を使用して SPA を構築することを検討していますが、ユーザーが JavaScript を無効にしていると、_Layout.cshtml + PartialView.cshtml にリダイレクトするのではなく、PartialView.cshtml だけにリダイレクトするという問題に直面しています。

レイアウトと 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"]が設定されているかどうかを確認しています。設定されている場合は、ポストバックであることを意味し、フォームを表示せずに代わりにメッセージを表示するか、フォームを表示します。

4

1 に答える 1

5

Action が 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);
}
于 2013-03-13T18:33:32.003 に答える