Есть два способа решить вашу проблему:
- Меньше работы - больше повторяемости.
- Больше работы, но не в соответствии с вашими предпочтениями.
Меньше работы
С любым ActionResult
вы можете просто добавить второй параметр в оператор return, чтобы указать имя используемого мастера:
return View("Gallery", "Default");
первое имя параметра - это представление, а второе означает переопределение главной страницы ... но это означает, что вам нужно повторять его везде, и это не намного лучше, чем то, что было раньше.
Больше работы
Способ, которым Spark находит главную страницу для использования, заключается в следующем коде во фреймворке:
protected virtual IEnumerable<string> PotentialDefaultMasterLocations(string controllerName, IDictionary<string, object> extra)
{
return ApplyFilters(new[]
{
"Layouts\\" + controllerName + ".spark",
"Shared\\" + controllerName + ".spark",
"Layouts\\Application.spark",
"Shared\\Application.spark"
}, extra);
}
Обратите внимание на жестко запрограммированный Application.spark
- это соглашение Spark. Кажется, что вы хотите переопределить этот метод и вместо этого добавить что-то вроде этого:
protected virtual IEnumerable<string> PotentialDefaultMasterLocations(string controllerName, IDictionary<string, object> extra)
{
return ApplyFilters(new[]
{
"Layouts\\" + controllerName + ".spark",
"Shared\\" + controllerName + ".spark",
"Layouts\\Default.spark",
"Shared\\Default.spark"
"Layouts\\Application.spark",
"Shared\\Application.spark"
}, extra);
}
Тогда он найдет ваш Default.spark
до того, как найдет Application.spark
, или вы можете полностью избавиться от Application.spark
, если он вам не подходит, и вы предпочитаете свои соглашения ...
Чтобы переопределить это, все, что вам нужно сделать, это создать класс, унаследованный от Spark.Web.Mvc.DefaultDescriptorBuilder
, и переопределить этот метод, упомянутый выше, и использовать его при регистрации механизма представления следующим образом:
public static void RegisterViewEngine(ICollection<IViewEngine> engines)
{
var services = SparkEngineStarter.CreateContainer();
services.SetServiceBuilder<IDescriptorBuilder>(
c => new MyDescriptorBuilder());
SparkEngineStarter.RegisterViewEngine(services);
}
Это означает, что теперь вы можете указать, где Spark должен искать главные представления и каковы будут их имена.
Надеюсь, это поможет,
Всего наилучшего,
РобертTheGrey
person
RobertTheGrey
schedule
28.12.2010