Существует два способа решения вашей проблемы:
- Меньше работы - но больше повторений.
- Больше работы, но изгоняет предпочитаемое соглашение.
Меньше работы
С любым 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 должен искать основные виды и какими будут имена.
Надеюсь, это поможет,
Всего наилучшего,
RobertTheGrey