asp.net-mvc2 - контроллер не учитывает область при возврате View () - PullRequest
0 голосов
/ 14 сентября 2011

При вызове return View() в контроллере, который находится в области, он пытается найти представления в главной папке ~/Views/{Controller}/ и основной папке ~/Views/Shared/. Он не выглядит в папке ~/{Area}/Views/{Controller}/.

Я попытался добавить значение маршрута для area в функцию MapRoute, а также попытался добавить «datatoken» для «area» в свойство DataTokens Маршрута.

Я что-то здесь упускаю?

Это MapRoute звонок:

routes.MapRoute("Product", "Products/{GroupName}/{CategoryId}/{CategoryName}/{ProductId}/{ProductName}/{PageName}", New With {.Area = "Products", .controller = "Products", .action = "Product", .PageName = ""}, New With {.CategoryId = "[0-9]*", .ProductId = "[0-9]*"})

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

Как мы обычно делаем с областями, мы добавляем файл AeaRegistraion (FooAreaRegistration.cs) и переопределяем методы AreaName и RegisterArea (). Для AreaName мы устанавливаем относительный путь к папке, в которой находится файл AearRegistration относительно глобального приложения. Ниже приведен пример.

public class FooAreaRegistration : AreaRegistration
{
    /// <summary>
    /// Get the Area Name
    /// </summary>
    public override string AreaName
    {
        get { return "ParentApp/AreaFolder"; }
    }

    /// <summary>
    /// Map and Route the area
    /// </summary>
    /// <param name="context"></param>
    public override void RegisterArea(AreaRegistrationContext context)
    {
        if (null != context)
        {
            //context.maproute goes here              
        }            
    }
}
0 голосов
/ 15 сентября 2011

Привет общие вещи, чтобы посмотреть:

Вы зарегистрировали картографию области и области?у вас одинаковое имя для контроллера в обоих местах?

Пример отображения области в global.asax
см. строку: AreaRegistration.RegisterAllAreas ();// Это часть, которую вам нужно выполнить

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

}

protected void Application_Start()
{

    AreaRegistration.RegisterAllAreas();  //  This is part you neeed to do
    RegisterRoutes(RouteTable.Routes);
    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}

}

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

namespace Project {/// /// Регистрация области администрирования /// открытый класс AdministratorAreaRegistration: AreaRegistration {/// /// Получает имя области, подлежащей регистрации./// /// Название области для регистрации.общедоступная переопределенная строка AreaName {get {return "Administrator";}}

    /// <summary>
    /// Registers an area in an ASP.NET MVC application using the specified area's context information.
    /// </summary>
    /// <param name="context">Encapsulates the information that is required in order to register the area.</param>
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Administrator_default",
            "Administrator/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional });
    }
}

}

, если у вас есть проблемы с маршрутизацией, проверьте это.

Я бы рекомендовал использовать это руководство и создавать тесты для каждой маршрутизации: http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx

...