在 Razor 页面上不显眼的 ajax 发布后更新部分视图

Posted

技术标签:

【中文标题】在 Razor 页面上不显眼的 ajax 发布后更新部分视图【英文标题】:update Partial View after unobtrusive ajax post on Razor Pages 【发布时间】:2021-11-16 12:53:09 【问题描述】:

我有一个父视图并在其中渲染了部分视图。我在部分视图中添加了表单标签。它转到控制器并返回数据,但部分视图内容没有得到更新。

<div class="row main-section-border">
        <div class="col-sm-12">

            @
                await html.RenderPartialAsync("_Partial", Model);
            
        </div>
        </div>

局部视图

    @model RandomModel 
    <form asp-controller="Controller" asp-action="Save" method="POST" data-ajax="true" data-ajax-success="success" data-ajax-failure="failed" data-ajax-update="#spForm">

    <div class="row left-right-padding" id="spForm">
        <input type="text"  id="document" asp-for="Document">
</div>

后端:

  public IActionResult Save(Random Model model)
        
          model.Document= "Random"
            return PartialView("~/Views/RandomFolder/_Partial.cshtml", model);
      

【问题讨论】:

【参考方案1】:

return PartialView("~/Views/RandomFolder/_Partial.cshtml", model);

由于你使用unobtrusive ajax,所以它会返回局部视图的html代码,但不会刷新局部视图。如果要刷新局部视图,可以尝试将html代码替换为@ 987654324@.这是一个工作演示:

div class="row main-section-border">
        <div id="div1" class="col-sm-12">

            @
                await Html.RenderPartialAsync("_Partial", Model);
            
        </div>
        </div>
@section scripts
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-ajax-unobtrusive/3.2.6/jquery.unobtrusive-ajax.js"></script>
    <script>
        completed = function (xhr) 
            $("#div1").html(xhr.responseText);
        ;
    </script>

局部视图:

@model RandomModel 
    <form asp-controller="Controller" asp-action="Save" method="POST" data-ajax="true" data-ajax-success="success" data-ajax-failure="failed" data-ajax-update="#spForm" data-ajax-complete="completed">

    <div class="row left-right-padding" id="spForm">
        <input type="text"  id="document" asp-for="Document">
</div>

后端(你需要使用ModelState.Clear(); 或者它会更喜欢使用ModelState中的模型值而不是你传递给Partial视图的模型。):

public IActionResult Save(RandomModel model)

        
            ModelState.Clear();
            model.Document = "Random";
            return PartialView("~/Views/B/_Partial.cshtml", model);
        

结果:

【讨论】:

您能接受它作为答案吗?谢谢。

以上是关于在 Razor 页面上不显眼的 ajax 发布后更新部分视图的主要内容,如果未能解决你的问题,请参考以下文章

在 Razor 页面中使用 OnPost 页面处理程序处理 AJAX 请求

Rails - Ajax 与不显眼的 javascript Jquery UI 进度条

在 .NET Core Razor 页面和 AJAX 中设置部分页面(视图)搜索路径

我如何在 Razor 页面中序列化表单并发送 JSON 请求 Ajax [重复]

示例 AJAX 回调到 ASP.NET Core Razor 页面

JavaScript 使用jQuery在单个元素上不显眼的多事件处理程序