gpt4 book ai didi

c# - AJAX仅适用于页面刷新

转载 作者:行者123 更新时间:2023-11-28 19:36:09 24 4
gpt4 key购买 nike

我正在编写一个网络应用程序,允许用户创建问题并为这些答案分配答案和分值。我进行了设置,以便用户输入他们想要提出的问题数量,然后我提取一个问题所需的所有字段。当用户单击“保存并下一步”按钮时,这些字段将被清除,他们可以输入下一个问题信息。我正在使用AJAX每次单击“保存并下一步”时将模型数据发布到我的服务器。我的问题是我的AJAX仅当我允许页面刷新(我不想这样做)时才会运行。

HTML

<input type="submit" id="next" value="Save & Next" />

Javascript

 $(document).ready(function () {
$('#next').click(function(e) {

var model = @Html.Raw(Json.Encode(Model));
e.preventDefault();

if (counter <= ques)
{
$.ajax({
url: "/Questions/Create",
type: "POST",
data: JSON.serialize(model),
cache: false,
success: function (data)
{

}
});
//counter++;
}
else {

}

});
});

C# 服务器端

    [HttpPost]
[ValidateAntiForgeryToken]
public int Create(QAViewModel qa)
{
System.Diagnostics.Debug.WriteLine("madeit");
if (ModelState.IsValid)
{
foreach (var item in qa.questions)
{
//add question data into the DB
db.questions.Add(item);
}
foreach (var item in qa.questionAnswers)
{
db.answers.Add(item);
}
db.SaveChanges();
return(1);
}

return (0);
}

真正的问题来自 e.preventDefault();如果我删除它,代码就会运行,并且我的模型数据会按预期添加到我的数据库中。当e.preventDefault()甚至还没有执行就添加了AJAX代码。我尝试过使用<input type="button">因为它的默认操作不执行任何操作。

关于为什么会发生这种情况有什么想法吗?

解决方案几个小时后,解决方案是使用 @Html.AddAntiForgeryToken()在我看来。我忘记了我正在检查防伪 token ,该 token 不允许 AJAX 将数据发布到我的 Controller 操作。

最佳答案

您正在使用不存在的函数JSON.serialize。如果要将 javascript 对象或数组转换为 JSON 字符串,请使用 JSON.stringify(object)

通过使用浏览器控制台检查是否抛出错误,可以轻松发现此问题

关于c# - AJAX仅适用于页面刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25851046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com