Javascript 单击按钮时运行控制器方法MVC#

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

我正在使用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").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内部服务器错误!是 啊