C#ASP.NET MVC-AJAX Post方法不会更新ModelView

C#ASP.NET MVC-AJAX Post方法不会更新ModelView,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我已经找了好几个小时了,但是我找不到任何解决方案 在我的C#Projekt中,我在月视图中实现了一个日历,并通过单击箭头显示上一个月。这是可行的,但只有一次。因为视图模型没有用Ajax更新 ->首先单击按钮,日期更改 ->第二次点击按钮没有任何改变 在调试模式下,我得到的信息是,当Ajax替换HTML代码时,模型会被更新,之后,“旧”信息会出现在模型中 也许我的代码中遗漏了什么,或者它真的不起作用? 这是我的密码: 家庭控制器: public ActionResult Index(string

我已经找了好几个小时了,但是我找不到任何解决方案

在我的C#Projekt中,我在月视图中实现了一个日历,并通过单击箭头显示上一个月。这是可行的,但只有一次。因为视图模型没有用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\u Test.Models;
@AjaxView模型
@型号.日期

以前的
至少还有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>

$(文档).ready(函数(){
$(“#prev”)。单击(函数(){
@{
DateTime PRVMMonth=新的日期时间(Model.Date.Year,Model.Date.Month-1,1);
}
var jsdate=“@prvmonth.ToString(“yyyy-MM-dd”)”
$.ajax({
cache:false,
async:false,
类型:“POST”,
url:'@url.Action(“索引”,“主页”),
数据:JSON.stringify({strdate:jsdate}),
数据类型:“html”,
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(数据){
$('#Date').html($('#Date',data.html());
},
错误:函数(xhr,错误){
调试器;
}
});
});
});
如果有什么不清楚或遗漏,请告诉我。 谢谢


编辑:为了更好地阅读和理解,我清理了代码。看起来您从模型中获得了上个月的数据

 @{
    DateTime prvmonth = new DateTime(Model.Date.Year, Model.Date.Month - 1, 1);
  }
所以,从一个简单的角度来看,看起来你为模型设定了一个日期,然后你不断地要求它减去一个月。但你总是要求它从同一个日期减去

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


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

正如我在评论中提到的,下面是有效的代码:

@using Ajax_Test.Models;
@model AjaxView

<div id="Date">
    @Model.Date

    <script> 
        AjaxThingshere 
    </script>
</div>

<p></p>
<button id="prev">Previous</button>
@使用Ajax\u Test.Models;
@AjaxView模型
@型号.日期
阿贾克斯辛谢尔酒店

以前的
是的,您走在正确的轨道上。昨天我自己找到了解决方案,在尝试了很多东西之后,比如局部视图。您可以使用上面显示的代码,但不同的是,您必须将。如果你把你提到的代码放在div中,也许就足够了,否则我总是从同一个日期减去。这是正确的。谢谢你的回复。