41

親ページをリロードせずにasp.net mvcで部分ビューフォームを送信する方法はありますが、部分ビューのみを新しい状態にリロードしますか? データバインドを使用してknockout.jsを更新する方法に似ています。

私のデータ テーブルは可変数の列/名前でレンダリングされるため、knockout.js はこのオプションではないと思います。そのため、代わりに部分ビューを使用しようとしています。

4

5 に答える 5

56

jQueryなしではありません。

あなたがしなければならないことは、あなたのパーシャルを次のようなdivに入れることです:

<div id="partial">
    @Html.Partial("YourPartial")
</div>

次に、更新する (たとえば、 id のボタンをクリックするbutton) には、次のようにします。

$("#button").click(function () {
   $.ajax({
       url: "YourController/GetData",
       type: "get",
       data: $("form").serialize(), //if you need to post Model data, use this
       success: function (result) {
           $("#partial").html(result);
       }
   });
})

次に、アクションは次のようになります。

public ActionResult GetData(YourModel model) //that's if you need the model
{
    //do whatever

    return View(model);
}
于 2013-02-28T21:49:04.920 に答える
13

実際、Partialに子アクションメソッドがある場合は、子アクションに直接投稿(またはアンカーリンクを使用)して、Ajaxのような効果を得ることができます。これはいくつかのビューで行います。

構文は

@Html.Action("MyPartial")

チャイルドアクションは

public ActionResult MyPartial()
{
    return PartialView(Model);
}

フォームが子アクションに投稿する場合

@using (Html.BeginForm("MyPartial"))
{
    ...
}

部分ビューは、子アクションから返された部分ビューで更新されます。

Jqueryは、パーシャルを更新するための正当な方法です。しかし、技術的には、あなたの質問に対する答えは「はい」です。

于 2013-02-28T21:57:09.870 に答える
3

通常、このようなものを探しているときに見つけたのは、人々が提供する情報があまりにも限られているため、ここで助けようとします. 重要なのは、戻り値の html を追加できる ID を使用して div を設定することです。また、コントローラーを叩いたときに、パーシャルが返されることを確認してください。この方法には潜在的な問題がいくつかありますが、天気の良い日にはうまくいくはずです。

<div id="CategoryList" class="widget">
    @{
        Html.RenderPartial("WidgetCategories.cshtml");
    }
</div>

          function DeleteCategory(CategoryID) {
            $.get('/Dashboard/DeleteWidgetCategory?CategoryID=' + CategoryID,
                function (data) {
                    if (data == "No") {
                        alert('The Category has report widgets assigned to it and cannot be deleted.');
                    }
                    else {
                        $('#CategoryList').html(data);
                    }

                }
            );
        }


    [HttpGet("DeleteWidgetCategory")]
    [HttpPost("DeleteWidgetCategory")]
    public IActionResult DeleteWidgetCategory(string CategoryID)
    {
        string Deleted = CategoryModel.DeleteCategory(CategoryID);

        if (Deleted == "Yes")
        {
            return PartialView("WidgetCategories");
        }
        else
        {
            return this.Json("No");
        }
    }
于 2016-12-02T21:47:32.753 に答える
2

このようなシナリオでは、部分ビューと @html.RenderPartial("partialName") 部分ヘルパーを使用して Ajax Form ヘルパーを使用します。

于 2013-03-20T03:04:10.680 に答える