视图在开机自检操作后不显示更新的数据



我试图加载一个局部视图,并通过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,如我的段落所示。

按钮在包含部分的主页面上,操作总是被点击,在调试过程中我可以看到该模型。NumeroMagina是2,但在视图中始终是1。

您的代码中存在一些问题。我看不出您在哪里更新HTML内容,还生成了nextPage函数eachTime等。

检查一下这个样品,它应该很容易使用。

控制器/ViewModel

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>
}

我试着写一个与你的代码非常相似的例子。

最新更新