C# ASP.NET MVC - AJAX Post Method 不会更新模型视图



我现在正在寻找解决方案几个小时,但我找不到任何解决方案。

在我的 C# 项目中,我在月视图中实现了一个日历,并通过单击箭头显示上个月。这有效,但只有一次。因为视图模型没有使用 Ajax 更新。

-> 首先单击按钮,日期已更改 ->第二次单击按钮没有任何变化

在调试模式下,我得到了信息,即模型在Ajax替换HTML代码的那一刻进行了更新,之后"旧"信息在模型中。

也许我在我的代码中错过了一些东西,或者它真的不起作用? 这是我的代码:

主控制器:

public ActionResult Index(string strdate)
{
DateTime date;
if (strdate == null)
{
date = DateTime.Now;
}
else
{
date = DateTime.Parse(strdate);
}
var model = new AjaxView(date);
return View(model);
}

模型视图:

public class AjaxView
{
public AjaxView(DateTime dateFnc)
{
Date = dateFnc;
}
public DateTime Date { get; set; }
}

带有应替换的div 的 cshtml:

@using Ajax_Test.Models;
@model AjaxView
<div id="Date">
@Model.Date
</div>
<p></p>
<button id="prev">Previous</button>

至少还有 AJAX 脚本:

<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#prev").click(function () {
@{
DateTime prvmonth = new DateTime(Model.Date.Year, Model.Date.Month - 1, 1);
}
var jsdate = "@prvmonth.ToString("yyyy-MM-dd")"
$.ajax({
cache: false,
async: false,
type: "POST",
url: '@Url.Action("Index","Home")',
data: JSON.stringify({ strdate: jsdate }),
dataType: 'html',
contentType: "application/json; charset=utf-8",
success: function (data) {
$('#Date').html($('#Date', data).html());
},
error: function (xhr, error) {
debugger;
}
});
});
});
</script>

如果有什么不清楚或遗漏了什么,请告诉我。 谢谢!

编辑:我清理了代码以更好地阅读和理解

看起来您正在从模型中获取上个月的数据。

@{
DateTime prvmonth = new DateTime(Model.Date.Year, Model.Date.Month - 1, 1);
}

因此,从快速浏览来看,您似乎为模型设定了日期,然后您不断要求它减去一个月。但是你总是要求它从同一日期减去。

使用另一个变量来存储视图上显示的当前月份可能是值得的。这可能是一个隐藏的输入,或者什么不是,然后从中减去一个月。

您可以做的另一件事是 POST 到不同的方法,然后返回 JSON 而不是 HTML,并且根本不更改模型或视图。

正如我的评论中提到的,这里是有效的代码:

@using Ajax_Test.Models;
@model AjaxView
<div id="Date">
@Model.Date
<script> 
AjaxThingshere 
</script>
</div>
<p></p>
<button id="prev">Previous</button>

最新更新