СинтаксисError: недопустимый флаг регулярного выражения ajax, Javascript

Это мой контроллер,

public ActionResult ReturnMethodTest(int id) 
{
    string name = "John";
    return Json( new {data=name});       
}

Я пытаюсь получить данные с этого контроллера, используя код ниже, но я получаю Syntax error.

Не могли бы вы рассказать мне, что я делаю неправильно?

$.ajax({
        url: @Url.Action("ReturnMethodTest", "HomeController"),
        data: {
            id: 5,
        },
        success: function (data) {
            console.log(data);
        }
    });

Ответ 1

@Url.Action возвращает строку url действия без кавычек вокруг нее.

Вам нужно будет обернуть этот URL в кавычки.

Заменить:

url: @Url.Action("ReturnMethodTest", "HomeController"),

С

url: '@Url.Action("ReturnMethodTest", "HomeController")',
//   ^                                                 ^

В противном случае файл, возвращенный клиенту, будет содержать:

url: /HomeController/ReturnMethodTest,

Какой недопустимый JS, и что вы хотите. Замена дает следующий результат:

url: '/HomeController/ReturnMethodTest',

Что представляет собой вполне допустимую строку JavaScript.

Ответ 2

Удалите суффикс Controller, указав в url.

Попробуйте так:

url: '@Url.Action("ReturnMethodTest", "Home")'

Ответ 3

Литерал регулярного выражения Javascript выглядит следующим образом - шаблон, заключенный между косыми чертами:

var re = /pattern/flags;

Если вы интерполируете переменную, которая начинается с косой черты, но не ставите кавычки вокруг нее, она будет интерпретироваться как регулярное выражение, а не строка. В другой раз это происходит с языком выражений JSP, где вы должны написать первое, а не второе:

var spinner = "<img src='${contextPath}/images/ajax-loader-small.gif'>"
var spinner = "<img src='" + ${contextPath} + "/images/ajax-loader-small.gif'>"

Ответ 4

<a href='@Url.Action("action","controller", new { paramname =  paramvalue })'>xx</a>