4

我有一个(我认为愚蠢的)问题。

我有一个控制器,Index 方法,它的视图有一些 JQuery 函数。

它运行良好,并且 JQuery 方法运行良好。

我使用的链接是

http://localhost:54209/TestInput/

但如果我把

http://localhost:54209/TestInput/Index

JQuery 函数不起作用。据我所知,他们应该采取完全相同的行动。

这是我唯一改变的

我真的很感谢你的帮助。在过去的几个小时里,这让我发疯了!

例如,这是我的脚本

<script>
  $(document).ready(function() {
    $('select#testCategoriesUniqueId').change(function() {
        var testCategory = $(this).val();
        $.ajaxSetup({ cache: false });
         alert ("AAA");
        $.ajax({
            url: "TestInput/listTestCases/" + testCategory,
            dataType: "json",
            type: 'post',
            success: function(data) {
                $("#testCasesUniqueId").removeOption(/./);
                for (var i = 0; i < data.length; i++) {
                    var val = data[i].Value;
                    var text = data[i].Text;
                    $("#testCasesUniqueId").addOption(val, text, false);
                }
            }
        });
    });
});

在这两种情况下,我都会收到警报,但在第二个链接中,我无法调用控制器。

它不调用我的控制器的 listTestCases 方法。

更新:

所以我尝试使用参数而不是确切的链接,我仍然有问题,我得到了两个来源,并得到了一个差异,唯一的区别是

<form name="aspnetForm" method="post" action="Index" id="aspnetForm">

对比

<form name="aspnetForm" method="post" action="TestInput" id="aspnetForm">

<form action="/TestInput/Index" method="post">

对比

<form action="/TestInput" method="post">

我相信这与 jQuery 无关。

在这两种情况下,我仍然看到 laert。但是 JQuery 在 ~/TestInput 中工作,而不是在 ~/TestInput/Index 中工作。

4

1 回答 1

5

这就是为什么您不应该在 asp.net mvc 应用程序中对 url 进行硬编码。你的问题是你的 ajax url 是一个相对 url。当您使用 url http://example.com/TestInput/加载页面时,ajax url 最终会变成http://example.com/TestInput/TestInput/listTestCases或者http://example.com/TestInput/列表测试用例

当您使用 url http://example.com/TestInput/Index您的 ajax url 最终成为http://example.com/TestInput/Index/TestInput/listTestCases

Insetead,您应该使用其中一个 Html 助手来声明您的 ajax url,如下所示。(使用剃刀语法)

<script>
  $(document).ready(function() {
    $('select#testCategoriesUniqueId').change(function() {
        var testCategory = $(this).val();
        $.ajaxSetup({ cache: false });
         alert ("AAA");
        $.ajax({
            url: "@Url.Action("listTestCases")"+ "/" + testCategory,
            dataType: "json",
            type: 'post',
            success: function(data) {
                $("#testCasesUniqueId").removeOption(/./);
                for (var i = 0; i < data.length; i++) {
                    var val = data[i].Value;
                    var text = data[i].Text;
                    $("#testCasesUniqueId").addOption(val, text, false);
                }
            }
        });
    });
});
</script>

ASPX 视图引擎更新:

如果您使用的是 Razor 的 ASPX 视图引擎,请使用此语法。

<script>
  $(document).ready(function() {
    $('select#testCategoriesUniqueId').change(function() {
        var testCategory = $(this).val();
        $.ajaxSetup({ cache: false });
         alert ("AAA");
        $.ajax({
            url: "<%=Url.Action("listTestCases")%>"+ "/" + testCategory,
            dataType: "json",
            type: 'post',
            success: function(data) {
                $("#testCasesUniqueId").removeOption(/./);
                for (var i = 0; i < data.length; i++) {
                    var val = data[i].Value;
                    var text = data[i].Text;
                    $("#testCasesUniqueId").addOption(val, text, false);
                }
            }
        });
    });
});
</script>

请务必使用 Firebug 或 F12 开发工具仔细检查您需要的确切网址。

于 2012-11-17T02:02:40.387 回答