有人用 asp.net mvc 2 preview 2尝试过Spark View Engine ?
我对AREAS有疑问。
看起来spark 引擎只在 Views 文件夹中查看 **.spark* 文件,而不是在另外的 Areas 文件夹中。
我的问题是:
有人知道如何添加它吗?
有人用 asp.net mvc 2 preview 2尝试过Spark View Engine ?
我对AREAS有疑问。
看起来spark 引擎只在 Views 文件夹中查看 **.spark* 文件,而不是在另外的 Areas 文件夹中。
我的问题是:
有人知道如何添加它吗?
Spark 不会自动检查当前版本中的区域视图位置。如果您愿意更改源(如果您正在做 mvc 2 的东西,我假设您是这样),这里是修复:
您必须修改文件src\Spark.Web.Mvc2\Descriptors\AreaDescriptorFilter.cs使其如下所示(更改由 ** 突出显示):
注意:我没有和我一起做这个的机器,所以格式字符串中的斜杠可能需要是正斜杠。
此外,可以在您自己的代码中创建此类并在注册视图引擎时将其传递,但我不记得我头顶上的配置代码。
这就是我所做的方法,因为我想尽可能少地修改火花源。
public class AreaDescriptorFilter : DescriptorFilterBase
{
**private const string areaPathFormatString = "~\\Areas\\{0}\\Views";**
public override void ExtraParameters(ControllerContext context, IDictionary<string, object> extra)
{
object value;
if (context.RouteData.Values.TryGetValue("area", out value))
extra["area"] = value;
}
public override IEnumerable<string> PotentialLocations(IEnumerable<string> locations, IDictionary<string, object> extra)
{
string areaName;
return TryGetString(extra, "area", out areaName)
**? locations.Select(x => Path.Combine(string.Format(areaPathFormatString,areaName), x)).Concat(locations)**
: locations;
}
}
Spark 在路由中查找约束或默认值键“区域”以确定视图位置。MVC 2 区域支持默认不添加这个,你必须在声明你的区域时添加:
public class AdminRoutes : AreaRegistration
{
public override string AreaName
{
get { return "admin"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Dashboard", action = "Index", id = "", area = "admin" },
new [] { "MyProject.Areas.Admin.Controllers" });
}
}
请注意area = "admin"
默认对象的内部。