Как вы наносите на карту маршруты согласно следующей схеме? - PullRequest
0 голосов
/ 17 мая 2011

Как вы отображаете этот URL
/ Topic / topicName / action? TopicId = someInt

Где Тема - имя контроллера (это const - всегда читается как "Тема"),
topicName игнорируется
action - имя действия,
и someInt является аргументом topicId для "действия".

Вот несколько примеров:
/ Topic / c-sharp / AddQuestion? TopicId = 1

Для вызова:
Контроллер: Тема
Действие: AddQuestion
topicId = 1

Где это особенность действия в TopicConroller

public ActionResult AddQuestion(int topicId)  

Другой пример:
/ Topic / MySql-запросы / AddSubTopic? TopicId = 1

Для вызова:
Контроллер: Тема
Действие: AddSubTopic
topicId = 1

Где это особенность действия в TopicConroller

public ActionResult AddSubTopic(int topicId)   

и т.д.. (все действия в контроллере тем получают только один аргумент - это идентификатор темы).

Ответы [ 3 ]

2 голосов
/ 17 мая 2011
routes.MapRoute(
    "Topics",
    "Topic/{topicName}/{action}",
    new { controller = "Topic", action = "Index" }
);

где у вас будет:

public class TopicController: Controller
{
    public ActionResult AddQuestion(int topicId) 
    {
        ...
    }
}

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

public ActionResult AddQuestion(int topicId, string topicName) 
{
    ...
}
1 голос
/ 17 мая 2011

Я нашел этот инструмент отладчика маршрута очень полезным, чтобы проверить мой путь к идеальному маршруту

http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

теперь у него есть пакет nuget. Может помочь и в дальнейших сценариях ...

1 голос
/ 17 мая 2011

Вы пробовали:

            routes.MapRoute(
                "Default",
                "{controller}/{topic}/{action}/{id}",
                new { controller = "Home", action = "Index" }
            );

Другой способ - сделать это как stackoverflow.Посмотрите на URL-адрес вопроса, вопрос идет после id и, вероятно, игнорируется.

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}/{*catchall}",
                new { controller = "Home", action = "Index" }
            );
...