0

部分ビューを使用してウィッシュリストをレンダリングする、開発中の Web アプリケーションがあります。この PartialView をメイン ページ内の div 内にレンダリングしたいと思います。ウィッシュリストのコンテンツは、永続化のために HttpContext.Profile オブジェクト内に保持されます。

部分的なビュー コントローラー内には、理想的には一度実行されると、インデックス アクションの更新をトリガーする機能の追加と削除があります。

実行中のアクションで、div 内の部分的なビューをレンダリングできますが、div をリロードするのではなく、ページ全体が結果ページにリダイレクトされます。これを達成する方法がわかりません。

コントローラ:

public ActionResult Index()
{
    var wish = WishListForm;

    //Perform lookup of any object id's located in the profile.
        if (wish.Properties.Any())
        {
            viewModel.Items = Nav.GetItems(wish.ItemIds).ToList();
        }
        return PartialView("RequestFormPartial", viewModel);
    }

    public ActionResult AddItem(int itemId)
    {
        var wish = WishListForm;
        if (!wish.Properties.Contains(itemId))
        {
            wish.Properties.Add(itemId);
        }
        WishListForm = wish;
        return RedirectToAction("Index");
    }

    public ActionResult RemoveItem(int itemId)
    {
        var wish = WishListForm;
        if (wish.Properties.Contains(itemId))
        {
            wish.Properties.Remove(itemId);
        }
        WishListForm = wish;
        return RedirectToAction("Index");
    }

    public ActionResult RemoveAllItems()
    {
        var wish = WishListForm;
        wish.Properties.RemoveAll(x => true);
        WishListForm = wish;
        return RedirectToAction("Index");
    }
}

Htmlウィッシュリスト

<script>
    $('#wishListTest').click(function () {
        $.ajax({
            type: 'POST',
            url: '@Url.Action("Index", "MyData")',
            success: function (data) {
                $("#wishlist").html(data);
            }
        });
    });
</script>

変更する必要があるのは RedirectToAction だと思いますか? 何か案は?

4

1 に答える 1

1

おそらく、部分ビューをリロードするだけです。ページ全体ではありません。できることは、Add リクエストが ajax 呼び出しからのものである場合、部分ビューのコンテンツを返すことです。

それでは、呼び出しが ajax 呼び出しであるかどうかを確認するために、アクション メソッドを少し更新してみましょう。

[HttpPost]
public ActionResult AddItem(int itemId)
{
    var wish = WishListForm();
    if (!wish.Properties.Contains(itemId))
    {
        wish.Properties.Add(itemId);
    }
    WishListForm = wish;
    if(Request.IsAjaxRequest())
    {
        //return the viewmodel with Items loaded
        var vm=new YourWishListViewModel();

        if (wish.Properties.Any())
        {
           vm.Items = Nav.GetItems(wish.ItemIds).ToList();
        }
        return PartialView("RequestFormPartial", vm);
    }
    else
    {
        return RedirectToAction("Index");
    }
}

また、ボタンクリックのデフォルトの動作を防ぐようにしてください(フォームを送信する可能性があります)。preventDefaultメソッドを使用してそれを行うことができます。

$('#wishListTest').click(function (e) {
   e.preventDefault();
   // your ajax posting code goes here
});
于 2013-06-03T21:25:36.290 に答える