4

我正在尝试将 Kendo UI MVC 包装器与 ServiceStack Razor Views 一起使用。

我按照Kendo UI 说明遵循了指示,希望它是直截了当的。

@HTML。没有在我的 cshtml 页面中显示 Kendo 扩展。

有人可以提供一些指导吗?

  • 我按照 Atanas Korchev 的要求更新了这些部分

    <compilation debug="true" targetFramework="4.5">
      <!-- Service Stack Razor View Build Provider -->
      <buildProviders>
        <add extension=".cshtml" type="ServiceStack.Razor.CSharpRazorBuildProvider, ServiceStack.Razor, Version=2.1.*, Culture=neutral" />
      </buildProviders>
      <assemblies>
        <add assembly="ServiceStack"/>
        <add assembly="ServiceStack.Razor"/>
        <add assembly="ServiceStack.Text" />
        <add assembly="Kendo.Mvc"/>
        <add assembly="WebApplication1" />
    <!-- MVC 3 Added at Atanas Korchev's request -->
    <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </assemblies>
    </compilation>
    
  • (由于某种原因,它拒绝显示代码示例,但我也将 Mvc 命名空间添加到了正确的部分)

它现在抛出错误:

'ServiceStack.Html.HtmlHelper<dynamic>' does not contain a definition for 'Kendo' and the best extension method overload 'Kendo.Mvc.UI.HtmlHelperExtension.Kendo(System.Web.Mvc.HtmlHelper)' has some invalid arguments}
  • 我将 @(Html.Kendo().DatePicker().Name("Birthday")) 粘贴到我的视图中并尝试编译,按照 Atanas 的请求获取此错误

  • 我认为如果没有一些源代码更改来处理 ServiceStack 的 HtmlHemlper,解决方案是不可能的?

原始 Web.config

<?xml version="1.0"?>

<configuration>

  <!-- Separate config section for each at the bottom of web.config -->
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web>
    <compilation debug="true" targetFramework="4.5">
      <!-- Service Stack Razor View Build Provider -->
      <buildProviders>
        <add extension=".cshtml" type="ServiceStack.Razor.CSharpRazorBuildProvider, ServiceStack.Razor, Version=2.1.*, Culture=neutral" />
      </buildProviders>
      <assemblies>
        <add assembly="ServiceStack"/>
        <add assembly="ServiceStack.Razor"/>
        <add assembly="ServiceStack.Text" />
        <add assembly="Kendo.Mvc"/>
        <add assembly="WebApplication1" />
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5" />
  </system.web>

  <!-- Register ServiceStack to listen on root path of web server -->
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
    </handlers>
  </system.webServer>


  <appSettings>
    <!-- Enables ServiceStack.Razor pages -->
    <add key="webPages:Enabled" value="false" />
  </appSettings>

  <!-- ServiceStack.Razor Config -->
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="ServiceStack.Razor.ViewPage">
      <namespaces>
        <!-- Make these namespaces available to razor views-->
        <!-- Required for ServiceStack -->
        <add namespace="ServiceStack.Html" />
        <add namespace="ServiceStack.Razor" />
        <add namespace="ServiceStack.Text" />

        <!-- Business -->
        <add namespace="WebApplication1" />

        <!-- Kendo UI MVC Wrappers -->
        <add namespace="Kendo.Mvc.UI" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

</configuration>
4

4 回答 4

1

注意:以下内容无意反映对 ServiceStack 或 KendoUI 的负面评价。他们都很棒。这些产品本质上是不相容的。这个问题的预期目的是调查这种性质的可行性


在详细查看了 Kendo.Mvc 的源代码后,我得出的结论是,Kendo.Mvc 不适合也不适合与 ServiceStack Razor 一起使用。

这是因为:

  • ServiceStack 的 Razor 对 System.Web.Mvc 没有依赖,而 Kendo.Mvc 重新引入了它
  • ServiceStack 有自己的类实现,如 HtmlHelper、ViewPage 和 Kendo.Mvc 依赖于 System.Web.Mvc 等价物的其他关键类。
  • 我还没有找到一种清晰的方法来轻松分离 Kendo.Mvc 对 MVC 控制器的依赖(ServiceStack razor 视图不使用)。希望能够以类型安全的方式简单地配置 razor 中的小部件,以呈现到与模型相关联的 html。

我将求助于编写自己的 Helpers,使用类似StackOverflow Q&A这样的方法作为方法。

于 2012-12-23T10:12:56.790 回答
1

我有同样的问题,但通过将以下命名空间添加到我的web.config.

<add namespace="Kendo"/>
<add namespace="Kendo.Mvc"/>
<add namespace="Kendo.Mvc.Extensions"/>
<add namespace="Kendo.Mvc.Ui"/>

我认为这里的关键是add namespace="Kendo.Mvc.Ui"

于 2013-05-01T13:11:26.723 回答
1

更新 Views 文件夹中的 web.config

<add namespace="Kendo.Mvc.UI"/>
于 2015-09-01T11:22:18.940 回答
-1

您需要在Views文件夹的 web.config 文件中添加相关的命名空间,而不是在顶层文件夹的主 web.config 文件中。只需仔细阅读说明。

于 2012-12-22T10:12:42.030 回答