Вызов метода контроллера MVC из папки Scripts

122
08 февраля 2021, 05:20

Есть следующий контроллер:

public class SomeController: Controller
{
    public ActionResult Index()
    {
        return View();
    }
    [HttpPost]
    public ActionResult SomeMethod()
    {
        return PartialView();
    }
}

Метод Index возвращает такое представление:

@Scripts.Render("~/Scripts/jquery-3.3.1.js")
<div id = "place_for_some_content"></div>
<script type="text/javascript" src="~/Scripts/SomeScript.js"></script>
<script>someFunction();</script>

Функция someFunction() определена в файле ~/Scripts/SomeScript.js:

var someFunction = function() {
    $.ajax({
        type: "POST",
        url: '@Url.Action("SomeMethod", "Some")',
        data: {},
        success: function (data) {
            alert("some alert");
            $('#place_for_some_content').html(data);
        }
    });
}

Проблема в том, что при таком подходе функция someFunction() даже не заходит в метод SomeMethod(), но при этом вываливается в состояние success (алерт отрабатывает), а в поле "place_for_some_content" помещается сообщение "Запрашиваемый ресурс не найден". Судя по всему, скрипт просто не видит контроллер?

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

Пожалуйста, подскажите, как правильно через ajax-запросы обращаться к методам контроллеров из отдельных js-файлов.

Область видимости для js файлов в вьюшном вебконфиге прописал.

Answer 1

Разобрался с помощью ответа отсюда

В двух словах, изменил вызов функции из срипта в представлении на:

<script>
    var SomeUrlVar = {
        URL: '@Url.ActionLink("SomeMethod", "Some")'
    }
    showTable(someUrlVar);
</script>

А скрипт SomeScript.js изменил следующим образом:

var someFunction = function(SomeUrl) {
    $.ajax({
        type: "POST",
        url: SomeUrl.URL,
        data: {},
        success: function (data) {
            alert("some alert");
            $('#place_for_some_content').html(data);
        }
    });
}

Это решило проблему

READ ALSO
Влияет ли имя таблицы, как параметр хранимой процедуры, на производительность?

Влияет ли имя таблицы, как параметр хранимой процедуры, на производительность?

Хочу реализовать хранимую процедуру, которая будет принимать название таблицы, колонки и значение для повышения производительности, тк

103
Можно ли сделать в MySQL CREATE TABLE LIKE с триггерами?

Можно ли сделать в MySQL CREATE TABLE LIKE с триггерами?

Возможно ли перенести триггеры в другую(точно такую же) таблицу в MySQL? У меня есть таблица test, со временем я её архивирую и на ее месте создаю...

126
MySQL текущая дата + значение

MySQL текущая дата + значение

Можно ли в MySQL создать столбец, в котором дата будет по умолчанию вычисляться как "дата1 + некоторое количество дней"? Например, у меня есть...

118
Магический метод __call() PHP

Магический метод __call() PHP

С помощью магического метода call передаю в функцию параметры в виде массива:

95