Сложная маршрутизация URL C # MVC 2.0 - PullRequest
0 голосов
/ 06 ноября 2010

Я новичок в ASP.NET MVC, и до сих пор мне удалось понять практически все, что мне нужно.Мои URL-адреса становятся все более сложными, и я могу заставить их маршрутизировать и делать то, что я хочу, но я уверен, что то, как я это делаю, неверно, и код, который я должен сделать, очень небрежный.Вот несколько URL-адресов:

mysite.com / Setup / FieldManager / Client / List
mysite.com/Setup/FieldManager/Client/Add

В основном макетURL-адрес, который я хочу, это Модуль / SubModule / Тип / Событие.Моя проблема в том, что мне нужно перейти к контроллеру установки, который вызывает действие диспетчера полей.Отсюда я должен сделать нелепое заявление о переключении, чтобы затем «подуправлять» маршрутизацией отсюда к другим правильным действиям.Мое действие Field Manager выглядит следующим образом:

public virtual ActionResult FieldManager(string type, string option, string inputType, string values, string label, string varname, string id)
    {
        CheckAuth(false);
        ActionResult theView = null;
        switch (type)
        {
            case "Client":
                switch (option)
                {
                    case "Add":
                        theView = AddClientField();
                        break;
                    case "List":
                        theView = ClientFieldManager();
                        break;
                    case "Save":
                        theView = SaveClientField(inputType, values, label, varname, id);
                        break;
                    default:
                        theView = EditClientField(option);
                        break;
                }
                break;
            case "Case":
                theView = View("CaseFieldManager");
                break;
            default:
                theView = View("Error");
                break;
        }
        return theView;
    }

Я хочу сохранить тот же URL-адрес, который я использую, и напрямую вызывать правильный контроллер / действие без необходимости перенаправления вызова от одного действия к другому.Текущие маршруты, которые я настроил, также приведены ниже.

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{type}/{option}",
            new { action = "Index", type = UrlParameter.Optional, option = UrlParameter.Optional }
        );

        routes.MapRoute(
            "Root",
            "",
            new { controller = "Account", action = "Index", id = UrlParameter.Optional }
        );

То, что у меня работает, просто слишком небрежно, и мне приходится конвертировать типы между вызовами.Я ищу лучший способ добиться того, почему я пытаюсь это сделать.Будет ли лучший способ сделать это, чтобы сделать сотни конкретных маршрутов для всех моих звонков, или я что-то упустил?

1 Ответ

0 голосов
/ 06 ноября 2010

Одно из улучшений может заключаться в отображении типа и параметра в обнуляемое перечисление вместо строк. Или сопоставьте модули областям MVC, subModule для контроллера, введите для действия и событие для обнуляемого перечисления.

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