POST 操作后视图不显示更新的数据

Posted

技术标签:

【中文标题】POST 操作后视图不显示更新的数据【英文标题】:View doesn't show updated data after POST action 【发布时间】:2020-11-11 07:11:44 【问题描述】:

我正在尝试加载部分视图并通过 POST Ajax 对其进行更改,但模型不会在视图中更新。

这就是我加载部分内容的方式:

@
    html.RenderAction("UltimeNovità", "User");

我在 UserController 中的操作是:

 public ActionResult UltimeNovità()
    
        _UltimeNovitàViewModel model = new _UltimeNovitàViewModel();
        model.NumeroPagina = 1;

        return PartialView("~/Views/User/Partial/_UltimeNovità.cshtml",model);
    

这里是部分:

@model Mine.Models._UltimeNovitàViewModel

<script>

$(document).ready(function () 
);

function nextPage() 
    $.ajax(
        url: '@Url.Action("UltimeNovitàPaginaSuccessiva")',
        type: 'POST',
        data:  pagina: @Model.NumeroPagina ,
        success: function (data) 
            $('#x').text('@Model.NumeroPagina');
        ,
        error: function (xhr) 
            alert('error');
        
    );


</script>

<p id="x">1</p>

最后,同一控制器中的 POST 动作:

[HttpPost]
    public ActionResult UltimeNovitàPaginaSuccessiva(int pagina)
                
        _UltimeNovitàViewModel model = new _UltimeNovitàViewModel();
        ModelState.Clear();
        model.NumeroPagina = pagina + 1;
        model.UltimeNovità = UserControllerMethods.GetUltimeNovità(model.NumeroPagina);

        return PartialView("~/Views/User/Partial/_UltimeNovità.cshtml", model);
    

我的问题是:为什么在 POST 操作之后 @Model.NumeroPagina 始终为 1?我希望每次按下使用 ajax 调用函数的按钮时,@Model.NumeroPagina 都会增加 1,并显示在我的段落中。

该按钮位于包含部分的主页中,总是点击操作,在调试期间我可以看到 model.NumeroPagina 为 2,但 view 始终为 1。

【问题讨论】:

【参考方案1】:

您的代码中存在一些问题。我看不到您在哪里更新 HTML 内容,而且您每次都在生成 nextPage 函数等等。

查看这个示例,它应该很容易使用。

控制器/视图模型

public class NovitàController : Controller

    public ActionResult Index()
    
        return View();
    

    public ActionResult UltimeNovità(int? page)
    
        var model = new UltimeNovitàViewModel
        
            NumeroPagina = 1
        ;
        return PartialView("_UltimeNovità", model);
    

    [HttpPost]
    public ActionResult UltimeNovitàPaginaSuccessiva(int pagina)
    
        var model = new UltimeNovitàViewModel
        
            NumeroPagina = pagina + 1,
            UltimeNovità = GetUltimeNovità(pagina + 1)
        ;

        return PartialView("_UltimeNovità", model);
    

    public string GetUltimeNovità(int page)
    
        return $"Ultime Novità: page"; //FOR DEMO
    

    public class UltimeNovitàViewModel
    
        public int NumeroPagina  get; set; 
        public string UltimeNovità  get; set; 
    

_UltimeNovità局部视图:

@model NovitàController.UltimeNovitàViewModel

@if (Model.UltimeNovità != null)

    <div>
        UltimeNovità: @Model.UltimeNovità
    </div>


<div>
    Pagina: @Model.NumeroPagina
</div>

<div>
    <a class="next-page-link" href="@Url.Action("UltimeNovitàPaginaSuccessiva", "Novità", new pagina = Model.NumeroPagina)">
        Pagina Successiva
    </a>
</div>

还有Index 页面:

@
    ViewBag.Title = "Novità";


<div id="RootDiv">
    @ Html.RenderAction("UltimeNovità", "Novità");
</div>

@section scripts
    <script>
        $(function() 
            function bindNextPageLink() 
                $("#RootDiv a.next-page-link").click(function(event) 
                    event.preventDefault();

                    $.post($(this).attr("href"),
                        function(data) 
                            $("#RootDiv").html(data);
                            bindNextPageLink();
                        
                    );
                );
            

            bindNextPageLink();
        );
    </script>

我尝试编写与您的代码非常相似的示例。

【讨论】:

以上是关于POST 操作后视图不显示更新的数据的主要内容,如果未能解决你的问题,请参考以下文章

更新视图未显示的范围变量。承诺不起作用

如何在文本视图中显示具有更新值的数据?

Vue使用v-for显示列表时,数组里的item数据更新,视图中列表不同步更新的解决方法

NSView 不显示更新

值更改时角度组件不更新

小部件不更新视图并且也没有显示错误