asp.net mvc выбор динамической области на основе значения параметра маршрута - PullRequest
1 голос
/ 16 ноября 2011

Я работаю над приложением, связанным со спортивными событиями.Существуют различные типы событий, такие как футбольный турнир и теннисный турнир.В зависимости от типа турнира, я хочу, чтобы запросы обрабатывались в другой области.Но события и их тип турнира настраиваются пользователями приложения и хранятся в базе данных.

В настоящее время у меня есть это подтверждение концепции:

public class SoccerTournamentAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "SoccerTournament";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        var soccerTournaments = new string[] { "championsleague", "worldcup" };
        foreach (var tournament in soccerTournaments)
        {
            context.MapRoute(
                string.Format("SoccerTournament_default{0}", tournament),
                string.Format("{0}/{{controller}}/{{action}}/{{id}}", tournament),
                new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                new[] { "Mvc3AreaTest1.Areas.SoccerTournament.Controllers" }
                );
        }
    }
}

, и это работает только, я хочу, чтобы soccerTournaments поступали из базы данных (не проблема), но я также хочу, чтобы она работала, спросите,новая запись типа события / турнира добавляется в базу данных, и в этом случае это не работает.

Как сделать выбор области динамическим, а не жестко закодированным в маршруты?

1 Ответ

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

Регистрация области происходит только при запуске приложения, поэтому любые турниры, добавленные после запуска, не будут регистрироваться до перезапуска.

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

Переопределите ваш маршрут следующим образом:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "SoccerTournament_default",
        "{tournament}/{controller}/{action}/{id}", 
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new { tournament = new MustBeTournamentName() },
        new string[] { "Mvc3AreaTest1.Areas.SoccerTournament.Controllers" }
    );
}

Чем вы можете создать MustBeTournamentName RouteConstraint, чтобы быть похожим на RouteConstraint в ответе на этот вопрос: Asp.Net Custom Routing и настраиваемая маршрутизация и добавить категорию перед контроллером

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