Нужно ли проходить через контроллер при получении данных для представления с Ajax в MVC? - PullRequest
1 голос
/ 11 ноября 2011

В моем коде JavaScript у меня есть следующее:

function SelectTopics() {
    $.ajax({
        url: "/Administration/Loc/SelectTopics",
        data: { DataSourceID: $('#DataSourceID').val(),
            LocationID: $('#LocationID').val()
        },
        success: function (data) {
            $('#TopicID').html(data);
            $('#SubTopicID').html("<option value='00'>All Sub Topics</option>");
        }
    });
}

В коде моего контроллера у меня есть:

    public string SelectTopics(string dataSourceID, string locationID)
    {
        return Select.Topics(
            dataSourceID, 
            locationID);
    }

В классе Select у меня есть следующее:

    public static string Topics(string dataSourceID, string locationID)
    {
        ...
        return text;
    }

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

1 Ответ

1 голос
/ 11 ноября 2011

MVC определенно требует класс Controller для обработки всех запросов. Вы не можете просто выставить класс Select без наследования Controller. Однако может быть способ минимизировать количество «сквозной избыточности» в вашем контроллере.

Простое отражение

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

Например, URL /Administration/Loc/Select/Topics?dataSourceId=x&locationId=y может быть перенаправлен с /Administration/{Controller}/{Action}/{Method} на:

public ActionResult Select(string method, string dataSourceID, string locationID) {
    var methodInfo = typeof(Select).GetMethod(method);
    return methodInfo.Invoke(dataSourceID, locationID);
}

MVC Routing

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

Возможно, можно использовать механизм маршрутизации MVC для передачи запросов контроллеру. Это может быть отличным решением, но оно определенно требует гораздо больше исследований, чем у меня есть время, извините. Хорошая новость заключается в том, что MVC имеет открытый исходный код, поэтому вы наверняка можете увидеть, как они это делают!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...