Spark-View-Engine с ASP.NET MVC2 - PullRequest
       17

Spark-View-Engine с ASP.NET MVC2

5 голосов
/ 14 января 2010

Как изменить проект ASP.NET MVC 2.0 для работы с Spark View Engine?

Я пытался, как описано здесь: http://dotnetslackers.com/articles/aspnet/installing-the-spark-view-engine-into-asp-net-mvc-2-preview-2.aspx

Но каким-то образом он все еще пытается маршрутизировать файлы .aspx.

Вот код моего global.asax:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

    }

    protected void Application_Start()
    {
        SparkViewFactory svf = new SparkViewFactory();
        PrecompileViews(svf);

        AreaRegistration.RegisterAllAreas();

        RegisterRoutes(RouteTable.Routes);
    }

    public static void PrecompileViews(SparkViewFactory svf)
    {
        var controllerFactory = svf;
        var viewFactory = new SparkViewFactory(controllerFactory.Settings);
        var batch = new SparkBatchDescriptor();
        batch
            .For<HomeController>()
            .For<AccountController>();
        viewFactory.Precompile(batch);
    }
}

}

Ответы [ 5 ]

3 голосов
/ 01 февраля 2010

http://www.simple -talk.com / сообщества / блоги / asiemer / Архив / 2010/01/31 / 89132.aspx

Мне пришлось загрузить исходный код движка Spark View (http://sparkviewengine.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27600).. После того, как я это сделал, я прошел через каждый из проектов, которые имели ссылку на версию 1.0 сборки System.Web.Mvc версии 1.0 и обновился до ссылки указать на System.Web.Mvc 2.0. Оттуда вы можете построить решение (в Visual Studio) и обнаружите, что целая куча тестов начинает давать сбой. Вы можете попытаться исправить их (добавив дополнительный параметр TextWriter, который вы найдем теперь нужно). Вы также увидите, что файл SparkView.cs жалуется на отсутствующий параметр. В методе Render (строка 100 исходного кода, который я скачал) мне пришлось обновить создание экземпляра wrappedViewContext, чтобы он выглядел следующим образом (добавить писателя в конец списка параметров):

public void Render(ViewContext viewContext, TextWriter writer)
{
    var wrappedHttpContext = new HttpContextWrapper(viewContext.HttpContext, this);

    var wrappedViewContext = new ViewContext(
        new ControllerContext(wrappedHttpContext, viewContext.RouteData, viewContext.Controller),
        viewContext.View,
        viewContext.ViewData,
        viewContext.TempData,
        writer); //  <-- add the writer to the end of the list of parameters

    ...
}

После обновления кода вы можете запустить скрипт build.cmd, который находится в корне скачанного вами исходного кода. Процесс сборки создаст zip-файл в папке build / dist. Возьми эти новые библиотеки и добавь их на свой сайт. Все должно работать снова.

2 голосов
/ 14 января 2010

Вам необходимо зарегистрировать Viewengine:

ViewEngines.Engines.Add(new SparkViewFactory());
1 голос
/ 22 января 2010

Если вы хотите сделать что-то свое, то исправление в sparkview google group .

Лично я бы дождался следующего релиза.

0 голосов
/ 14 января 2010

Я бы посмотрел на образцы, поставляемые с пакетом Spark-1.0.zip. Глядя на один из них случайным образом, есть это в Global.asax.cs

SparkEngineStarter.RegisterViewEngine();

Надеюсь, это поможет.

0 голосов
/ 14 января 2010

Мой global.asax.cs содержит это:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
        ViewEngines.Engines.Add(new SparkViewFactory());

    }
}

и мой web.config содержит это:

<configSections>
    <section name="spark" type="Spark.Configuration.SparkSectionHandler, Spark"/>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            </sectionGroup>
        </sectionGroup>
    </sectionGroup>
</configSections>

<spark>

    <pages>
        <namespaces>
            <add namespace="System"/>
            <add namespace="System.Collections.Generic"/>
            <add namespace="System.Linq"/>
            <add namespace="System.Web.Mvc"/>
        </namespaces>
    </pages>
</spark>
...