Kendo UI MVC和ServiceStack Razor - 没有HtmlHelpers

时间:2012-12-22 07:48:55

标签: c# asp.net-mvc kendo-ui servicestack

我正在尝试使用带有ServiceStack Razor Views的Kendo UI MVC包装器。

我按照Kendo UI Instructions按照说明操作,希望它能够直截了当。

@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()。姓名(“生日”)粘贴到我的视图并尝试编译,根据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 个答案:

答案 0 :(得分: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剃刀视图不使用)。希望能够以一种类型安全的方式在剃刀中配置Widgets以呈现给与模型绑定的html。

我会使用像StackOverflow Q&A这样的方法来编写我自己的助手。

答案 1 :(得分: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"

答案 2 :(得分:1)

使用

更新Views文件夹中的web.config
HttpPost httpPost = new HttpPost(fullFormActionUrlWithServerAndPort);
List <NameValuePair> nvp = new ArrayList <NameValuePair>();
nvp.add(new BasicNameValuePair("name-of-the-user-field", "your-user-name"));
nvp.add(new BasicNameValuePair("name-of-the-pass-field", "your-password"));
httpPost.setEntity(new UrlEncodedFormEntity(nvp));

答案 3 :(得分:-1)

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

相关问题