3

一部のボディは、asp.netmvc2プレビュー2でSparkViewEngineを試しましたか

AREASに問題があります。

さらに、Areasフォルダーではなく、Viewsフォルダー内の**。spark*ファイルのみがsparkエンジンに見えるように見えます。

私の質問は:

誰かがそれを追加する方法についての情報を持っていますか?

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は、ルート内の制約またはデフォルト値キー「area」を探して、ビューの場所を決定します。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 に答える