Ajax称方法不会触发

时间:2014-07-29 15:13:07

标签: ajax asp.net-mvc

我有一个部分观点:

@using confidenitial.DB.DataLayer;

<div id="page">
    @{
        List<Network> networks = (List<Network>)ViewData["Networks"];
        <table>
            <tr>
                <td style="text-align: center">ID</td>
                <td style="text-align: center">Name</td>
                <td style="text-align: center" colspan="2">Modify</td>
            </tr>
            @foreach (Network n in networks)
            {
                <tr>
                    <td style="text-align: center">
                        @n.ID
                    </td>
                    <td style="text-align: center">
                        @n.Name
                    </td>
                    <td>
                        <button>Rename</button>
                    </td>
                    <td>
                        <button onclick="removeNetwork()">Delete</button>
                    </td>
                </tr>
            }
        </table>
    }
</div>

@section Scripts{
    <script>
        function removeNetwork() {
            $.ajax({
                url: "/Admin/removeNetwork",
                type: "GET",
                data: { id: id}
            }).done(function (result) {
                $('#page').html(result);
            });
        }
    </script>
}

控制器:

[HttpPost]
public ActionResult removeNetwork(int id)
{
     //query
     return PartialView("_Whatever");
}

我希望它从控制器调用removeNetwork方法但由于某种原因它没有触发。我会说这是我的错,但我在调用addNetwork时写了完全相同的ajax,并且工作正常。

@section Scripts{
    <script>
        function addNetwork() {
            $.ajax({
                url: "/Admin/addNetwork",
                type: "GET",
                data: { newNetwork: newNetwork.value }
            }).done(function (result) {
                $('#table').html(result);
                $('#newNetwork').val("");
            });
        }
    </script>
}

两者之间有什么大的区别?我无法弄清楚。

修改

我发现问题所在:该功能不能在局部视图中,所以我把它放在主视图中。我在查看服务器吐出的html后发现了这个(脚本部分没有包含这个脚本)。

2 个答案:

答案 0 :(得分:2)

您的removeButton方法正在读取变量id的值,该变量既未声明为全局,也未传递给方法。因此,请更改您的方法以将其作为参数接受。

<script>
    function removeNetwork(id) {
        $.ajax({
            url: "/Admin/removeNetwork",
            type: "GET",
            data: { id: id }
        }).done(function (result) {
            $('#page').html(result);
        });
    }
</script>

并在您的标记中,将其传递给您的方法。

<td>
    <button onclick="removeNetwork(@n.ID)">Delete</button>
</td>

这应该有用。

答案 1 :(得分:0)

您在ajax中执行GET请求(类型:“GET”)但您的操作配置为用作POST请求([HttpPost]属性)您必须通过[HttpGet]或ajax请求更改操作的属性通过POST而不是GET