41

有没有办法在 asp.net mvc 中提交部分视图表单而不重新加载父页面,但仅将部分视图重新加载到其新状态?类似于 knockout.js 使用数据绑定进行更新的方式。

我的数据表以可变数量的列/名称呈现,所以我不认为 knockout.js 是这个选项的一个选项,所以我尝试使用部分视图。

4

5 回答 5

56

不是没有 jQuery。

您需要做的就是将您的 Partial 放在一个 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

通常我在寻找这样的东西时发现人们提供的信息太有限,所以我会尝试在这里提供帮助。关键是设置一个带有 ID 的 div,您可以将返回的 html 附加到该 ID。此外,当您点击控制器时,请确保它返回部分。这种方法有一些潜在的问题,但在美好的一天它应该可以工作。

<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 表单帮助器

于 2013-03-20T03:04:10.680 回答
0

在您的主视图中

<div id=SearchResult>
   @Html.Partial("_NameOfPartialView", Model)
</div>

<input type="button" id="btnSubmit" value="Submit">

在您的 Javascript 文件中

$('#btnSubmit').click(function () {
    GetData(Id);
});

function GetData(Id){
  $.ajax({
     url: "/Home/GetEmployee/",
     type: "get",
     data: { Id:Id },
     success: function (result) {
     $('#SearchResult').html(result);
     }
   });
}

在您的家庭控制器中

public ActionResult GetEmployee(int Id)
{
   var employee= context.Employee.Where(x=> x.EmployeeId == Id)

   return this.PartialView("_NameOfPartialView", employee);
}
于 2020-05-17T03:18:45.650 回答