我正在使用visual studio 2013,MVC4和C#制作一个简单的应用程序。此Web应用程序具有一个包含多个复选框的表,默认情况下会显示一个“更新”按钮。单击一个或多个复选框时,我会激活该按钮。
这里的想法是,当单击“更新”按钮时,将复选框的所有信息(打开或关闭的)发送到服务器,然后将这些更改保存在数据库中。
为了达到这个目的,我试图通过jquery使用ajax,但不幸的是我没有成功,因为当我点击按钮时没有任何反应。
这是我用来为客户端生成视图的cshtml
文件:
<input type="submit" value="Save Checkbox Changes" class="btn btn-primary disabled" id="SaveCheckboxChanges" />
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.RequiresSetup)
</th>
<th>
@Html.DisplayNameFor(model => model.Disabled)
</th>
</tr>
@{
foreach (var item in Model)
{
<tr>
<td>
@Html.EditorFor(modelItem => item.RequiresSetup)
</td>
<td>
@Html.EditorFor(modelItem => item.Disabled)
</td>
</tr>
}
}
</table>
我对按钮SaveCheckboxChanges
的javascript代码如下:
$("#SaveCheckboxChanges").click(function (event) {
if (!$("#SaveCheckboxChanges").hasClass("disabled")) {
$.ajax({
url: '/Material/UpdateCheckBoxes',
type: 'POST',
data: {bla: "bdsjdnjsdnsnd"
},
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data.success);
},
error: function () {
alert("error");
}
});
}
});
在我的材料控制器中,我有以下内容:
[HttpPost]
public ActionResult UpdateCheckBoxes(string bla)
{
return Content("Working!" + bla);
}
我的期望是,点击按钮后,页面会显示&#34; Working&#34;字符串,表示控制器中的函数已正确执行。
然而,这种情况并没有发生,我所看到的只是javascript警告说&#34;错误&#34;。
如何让这个ajax请求有效?我错过了什么?
答案 0 :(得分:1)
你的控制器方法什么都不返回......
将其转换为以下::
public String Material()
{
return "Working!";
}
答案 1 :(得分:1)
这不是事情的运作方式。当您响应AJAX请求调用Response.Write
时,实际的AJAX响应就是字符串&#34; Working!&#34;。什么都不会被写入页面,除非你把这个字符串并自己添加到DOM的某个地方。
答案 2 :(得分:1)
我在您的代码中看到了3个不正确的内容。
1)[ValidateAntiForgeryToken] 你没有在你的ajax调用中实现它,所以你应该在你的控制器中删除它。 (我不知道如何在JQuery中使用它。)
2)如果您的控制器被调用&#34; MaterialController.cs&#34;如果您尚未更改路线配置,则使用的网址为:&#39; /材料/材料&#39;。
3)你的函数返回&#34; void&#34;。用字符串或ActionResult替换你的void。然后,替换你的&#34; Response.write&#34;通过返回&#34;一些字符串&#34;。
答案 3 :(得分:0)
问题出在Ajax调用中。这是解决方案:
$.ajax({
url: "Controler/Action",
type: 'POST',
contentType: 'application/json; charset=utf-8',
traditional: true,
data: JSON.stringify({ requiresSetupArray: requiresSetupArray, disabledArray: disabledArray }),
success: function (data) {
button.attr('value', 'Save Checkbox Changes');
button.addClass('disabled');
},
error: function () {
alert("error");
}
});
需要注意的一些事项:
希望将来帮助某人!