Javascript 单击按钮时运行控制器方法MVC#
我正在使用visual studio 2013、MVC4和C#制作一个简单的应用程序。此web应用程序有一个带有多个复选框的表,并且默认情况下取消了“更新”按钮。单击一个或多个复选框时,我将激活该按钮 这里的想法是,当单击更新按钮时,将复选框的所有信息(哪些是打开的还是关闭的)发送到服务器,然后将这些更改保存到数据库中 为了实现这一点,我试图通过jquery使用ajax,但不幸的是,我没有成功,因为当我单击按钮时,什么都没有发生 这是我用来为客户端生成视图的Javascript 单击按钮时运行控制器方法MVC#,javascript,c#,jquery,ajax,asp.net-mvc-4,Javascript,C#,Jquery,Ajax,Asp.net Mvc 4,我正在使用visual studio 2013、MVC4和C#制作一个简单的应用程序。此web应用程序有一个带有多个复选框的表,并且默认情况下取消了“更新”按钮。单击一个或多个复选框时,我将激活该按钮 这里的想法是,当单击更新按钮时,将复选框的所有信息(哪些是打开的还是关闭的)发送到服务器,然后将这些更改保存到数据库中 为了实现这一点,我试图通过jquery使用ajax,但不幸的是,我没有成功,因为当我单击按钮时,什么都没有发生 这是我用来为客户端生成视图的cshtml文件: <input
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").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);
}
我所期望的是,单击按钮后,页面显示“正在工作”字符串,这意味着控制器中的函数已正确执行
然而,这并没有发生,我所看到的只是javascript警告“error”
如何使这个ajax请求工作?我缺少什么?您的控制器方法不返回任何内容 将其转换为以下内容:
public String Material()
{
return "Working!";
}
您的控制器方法不返回任何内容 将其转换为以下内容:
public String Material()
{
return "Working!";
}
您的控制器方法不返回任何内容 将其转换为以下内容:
public String Material()
{
return "Working!";
}
您的控制器方法不返回任何内容 将其转换为以下内容:
public String Material()
{
return "Working!";
}
事情不是这样的。调用
Response.Write
响应AJAX请求时,实际的AJAX响应是字符串“Working!”。除非您自己将该字符串添加到DOM的某个地方,否则任何内容都不会写入页面。事情不是这样的。调用Response.Write
响应AJAX请求时,实际的AJAX响应是字符串“Working!”。除非您自己将该字符串添加到DOM的某个地方,否则任何内容都不会写入页面。事情不是这样的。调用Response.Write
响应AJAX请求时,实际的AJAX响应是字符串“Working!”。除非您自己将该字符串添加到DOM的某个地方,否则任何内容都不会写入页面。事情不是这样的。调用Response.Write
响应AJAX请求时,实际的AJAX响应是字符串“Working!”。除非您自己将该字符串添加到DOM的某个地方,否则将不会向页面写入任何内容。我在您的代码中看到了3个不正确的地方
1) [ValidateAntiForgeryToken]
您没有在ajax调用中实现它,所以应该在控制器中删除它。(我不知道如何在JQuery中使用它)
2) 如果您的控制器名为“MaterialController.cs”,并且您尚未更改路由配置,则要使用的URL为:“/Material/Material”
3) 函数返回“void”。用字符串或ActionResult替换您的void。然后,将“Response.write”替换为返回“some string”。我在代码中看到了3个不正确的地方 1) [ValidateAntiForgeryToken] 您没有在ajax调用中实现它,所以应该在控制器中删除它。(我不知道如何在JQuery中使用它) 2) 如果您的控制器名为“MaterialController.cs”,并且您尚未更改路由配置,则要使用的URL为:“/Material/Material”
3) 函数返回“void”。用字符串或ActionResult替换您的void。然后,将“Response.write”替换为返回“some string”。我在代码中看到了3个不正确的地方 1) [ValidateAntiForgeryToken] 您没有在ajax调用中实现它,所以应该在控制器中删除它。(我不知道如何在JQuery中使用它) 2) 如果您的控制器名为“MaterialController.cs”,并且您尚未更改路由配置,则要使用的URL为:“/Material/Material”
3) 函数返回“void”。用字符串或ActionResult替换您的void。然后,将“Response.write”替换为返回“some string”。我在代码中看到了3个不正确的地方 1) [ValidateAntiForgeryToken] 您没有在ajax调用中实现它,所以应该在控制器中删除它。(我不知道如何在JQuery中使用它) 2) 如果您的控制器名为“MaterialController.cs”,并且您尚未更改路由配置,则要使用的URL为:“/Material/Material”
3) 函数返回“void”。用字符串或ActionResult替换您的void。然后,将“Response.write”替换为“some string”。问题出在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");
}
});
需要注意的几件事:
- 字符串化很重要。没有它,一切都不起作用
- 注意内容类型
- 仔细检查控制器正在验证的参数李>
希望它能帮助将来的人 问题出在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");
}
});
需要注意的几件事:
- 字符串化很重要。没有它,一切都不起作用
- 注意内容类型
- 仔细检查控制器正在验证的参数李>
希望它能帮助将来的人 问题出在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");
}
});
需要注意的几件事:
- 字符串化很重要。没有它,一切都不起作用
- 注意内容类型
- 仔细检查控制器正在验证的参数李>
希望它能帮助将来的人 问题出在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");
}
});
需要注意的几件事:
- 字符串化很重要。没有它,一切都不起作用
- 注意内容类型
- 仔细检查控制器正在验证的参数李>
希望它能帮助将来的人 在Fiddler或DevTools中查看网络事务时,您得到的是404还是500?我得到的是500内部服务器错误!是 啊