Kendo UI MVC and ServiceStack Razor - No HtmlHelpers

本文关键字:No HtmlHelpers Razor ServiceStack UI MVC and Kendo | 更新日期: 2023-09-27 17:49:20

我正在尝试使用Kendo UI MVC包装器与ServiceStack Razor视图。

我遵循了剑道UI说明的指示,希望它能直截了当。

@Html。在我的cshtml页面中没有显示剑道扩展。

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

  • 我按照Atanas korchestrv的要求更新了章节

    <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>

Kendo UI MVC and ServiceStack Razor - No HtmlHelpers

注意:以下内容并不打算反映对ServiceStack或KendoUI的负面看法。他们都是惊人的。这些产品本质上是不相容的。这个问题的预期目的是调查这种性质的可行性


通过查看剑道的源代码。在Mvc的详细介绍下,我总结出了剑道。Mvc不适合也不适合与ServiceStack Razor一起使用。

这是因为:

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

我将诉诸于编写我自己的助手,使用像这样的StackOverflow Q&A作为一种方法。

我遇到了同样的问题,但是通过向我的web.config添加以下名称空间来解决它。

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

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

更新网页。

在Views文件夹中配置
<add namespace="Kendo.Mvc.UI"/>

您需要在web中添加相关的名称空间。配置文件在Views文件夹中,而不是在主web中。配置文件在顶部文件夹。请仔细阅读说明书。