C# Kendo UI MVC和ServiceStack Razor-无HTMLHelper
我正在尝试将Kendo UI MVC包装器与ServiceStack Razor视图一起使用 我已经按照的方向走了,希望它是直截了当的 @Html。不会在我的cshtml页面中显示剑道扩展 有人能给我一些指导吗C# Kendo UI MVC和ServiceStack Razor-无HTMLHelper,c#,asp.net-mvc,kendo-ui,
servicestack,C#,Asp.net Mvc,Kendo Ui,
servicestack,我正在尝试将Kendo UI MVC包装器与ServiceStack Razor视图一起使用 我已经按照的方向走了,希望它是直截了当的 @Html。不会在我的cshtml页面中显示剑道扩展 有人能给我一些指导吗 我按照Atanas Korchev的要求更新了这些章节 <compilation debug="true" targetFramework="4.5"> <!-- Service Stack Razor View Build Provider --> &
- 我按照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>
- (出于某种原因,它拒绝显示代码sampe,但我也将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}
'ServiceStack.Html.HtmlHelper'不包含'Kendo'的定义,并且最佳扩展方法重载'Kendo.Mvc.UI.HtmlHelperExtension.Kendo(System.Web.Mvc.HtmlHelper)'具有一些无效参数}
- 我将@(Html.Kendo().DatePicker().Name(“生日”))粘贴到我的视图中,并根据Atanas的请求尝试编译以获取此错误
- 我认为,如果不对ServiceStack的HtmlHemlper进行一些源代码更改,解决方案是不可能的
<?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>
您需要将相关名称空间添加到视图文件夹的web.config文件中,而不是顶部文件夹的主web.config文件中。请仔细阅读说明。注意:以下内容并不表示对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视图不使用这些控制器)。hopewas能够简单地在razor中以一种类型安全的方式配置小部件,并将其呈现为html,绑定到模型
我将使用类似的方法编写自己的帮助程序。我也遇到了同样的问题,但通过将以下名称空间添加到我的
web.config
中解决了这个问题
<add namespace="Kendo"/>
<add namespace="Kendo.Mvc"/>
<add namespace="Kendo.Mvc.Extensions"/>
<add namespace="Kendo.Mvc.Ui"/>
我认为这里的关键是
addnamespace=“Kendo.Mvc.Ui”
用
<add namespace="Kendo.Mvc.UI"/>
它们会自动继承到“视图”文件夹中。web.config就是这样工作的。。。问题特别在于尝试使用ServiceStack razor。。。它有自己的System.Web.Mvc.HtmlHelper实现,正如我上次编辑提到的,这是最好的做法。MVC的剑道UI很大程度上依赖于System.Web.MVC,您无法真正将其删除。为了补充,这里是Telerik的官方答案: