3

有人用 asp.net mvc 2 preview 2尝试过Spark View Engine ?

我对AREAS有疑问。

看起来spark 引擎只在 Views 文件夹中查看 **.spark* 文件,而不是在另外的 Areas 文件夹中。

我的问题是:

有人知道如何添加它吗?

4

2 回答 2

2

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;
    }
}
于 2009-12-02T18:30:22.847 回答
1

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"默认对象的内部。

于 2009-11-04T10:26:20.887 回答