Изменить правило поиска для представлений

У меня есть приложение, которое развертывается в нескольких странах. В файле web.config будет параметр, определяющий страну. Страны не будет в URL-адресе.

Некоторые взгляды меняются в зависимости от страны. Моя первая попытка - использовать папку внутри папки представлений, содержащую представления, если они отличаются от представления по умолчанию:

По умолчанию

/questions/ask.aspx

Испания

/questions/ESP/ask.aspx

Если в папке страны нет представления, используется представление по умолчанию. Есть ли способ сначала расширить ViewEngine для просмотра в папке страны?

РЕДАКТИРОВАТЬ:

Это только poc. Чтобы увидеть полную реализацию, взгляните на

http://pietschsoft.com/?tag=/mvc

      private static string[] LocalViewFormats = 

       new string[] {
           "~/Views/{1}/ESP/{0}.aspx",
        "~/Views/{1}/{0}.aspx",
        "~/Views/{1}/{0}.ascx",
        "~/Views/Shared/{0}.aspx",
        "~/Views/Shared/{0}.ascx"
    };

      public LocalizationWebFormViewEngine()
      {      
        ViewLocationFormats = LocalViewFormats; 
    }

person Mathias F    schedule 12.03.2009    source источник


Ответы (1)


public class MyViewEngine : WebFormViewEngine
{
    private static string[] LocalViewFormats = new[] { "~/Views/ESP/{0}.aspx",
                                                          "~/Views/ESP/{0}.ascx" };
    public MyViewEngine()
    {
        ViewLocationFormats = LocalViewFormats.Union(ViewLocationFormats).ToArray();
    }
}

Очевидно, что вы не хотите жестко кодировать местоположение, но это должно дать вам общее представление.

person Craig Stuntz    schedule 12.03.2009
comment
Это метод расширения в System.Linq - person Craig Stuntz; 13.03.2009
comment
где вы помещаете этот код? Я пробовал это с моими представлениями Razor, и это не сработало. Отличается ли код для MVC3 с механизмом просмотра Razor? (Спросил @Leon) - person jjnguy; 14.02.2011
comment
Код находится в движке представления, но для Razor вы не будете использовать WebFormViewEngine по, надеюсь, очевидным причинам. Неудивительно, что вы используете RazorViewEngine вместо этого. - person Craig Stuntz; 14.02.2011