1

我在 MVC4 RAZOR视图项目中有以下 jQuery 代码。当我对 url 进行硬编码时,号召性用语方法可以正常工作。但是当我使用时Url.Action,它不起作用。

硬编码方法的结果:http://localhost:64994/Search/GetCostpages/?costPageNumber=111

Url.Action 方法的结果:http://localhost:64994/@Url.Action(%22Search%22,%20%22GetCostpages%22)?costPageNumber=111

在此需要纠正什么才能使其正常工作?

$(function ()
{
    $("#btnCostPageNumberMagnifingLens").click(function ()
    {

        var costPageNumber = $("#txtCostPageNumber").val();

        //$.getJSON('/Search/GetCostpages/',{costPageNumber: costPageNumber},

        $.getJSON('@Url.Action("Search", "GetCostpages")',{costPageNumber: costPageNumber},
                            function (data) 
                            {

                             alert('Inside Function');

                             });
    });
});
4

4 回答 4

5

您不能在单独的 javascript 文件中使用服务器端助手。您可以使用 DOM 中的 url。例如,这里你有一个不显眼的 AJAXified 一些btnCostPageNumberMagnifingLens元素。

因此,您可以在此按钮上使用 HTML5 data-* 属性来放置所需的 url:

<input type="button" id="btnCostPageNumberMagnifingLens" data-url="@Url.Action("Search", "GetCostpages")" value="some button" />

然后在您单独的 javascript 文件中,只需从 DOM 中读取它并将其用于您的 AJAX 请求:

$(function () {
    $('#btnCostPageNumberMagnifingLens').click(function () {
        var costPageNumber = $('#txtCostPageNumber').val();
        var url = $(this).data('url');
        $.getJSON(url, { costPageNumber: costPageNumber }, function (data) {
            alert('Inside Function');
        });
    });
});
于 2013-09-09T07:25:09.510 回答
2

Javascript 没有 Url 助手的概念,因此该getJSON方法以@Url.Action("Search", "GetCostpages")字符串的形式接收,然后对其进行编码,从而导致您最终得到奇怪的 URL。

只要此脚本在视图中(而不是在单独的脚本文件中),您只需从Url.Action方法中删除引号,razor 就会知道这是一个 Url 助手而不是字符串。

于 2013-09-09T07:25:37.740 回答
1

Darin 指出了 HTML5 数据属性方法。这是一个很好的方法

但是我使用隐藏字段方法,因为我认为它更不引人注目..

jQuery

    var genericUrl = $('.hiddenUrl').val();
    var lastIndex = genericUrl.lastIndexOf("/") + 1;
    var urlFirstPart = genericUrl.substring(0, lastIndex);

    $("#btnCostPageNumberMagnifingLens").click(function () {

        var url = urlFirstPart + 'GetCostpages/';

    });

HTML

<div class="loader">
    @Html.Hidden("hiddenUrlName", Url.Action("Action", "Search"), new { @class = "hiddenUrl" })
</div>

获取 App Root - 另一种方法

<script type="text/javascript">
  var appRoot = '@this.Request.ApplicationPath';
</script>
于 2013-09-11T04:12:07.647 回答
0

如果您将视图和 Js 文件组合为视图,则此方法应该有效。

于 2013-09-09T11:54:05.220 回答