【问题标题】:How can I make Input Builders (MVC Contrib) work with Spark View Engine?如何使 Input Builders (MVC Contrib) 与 Spark View Engine 一起使用?
【发布时间】:2009-11-17 16:55:29
【问题描述】:

今天我花了整整三个小时尝试转换项目 MvcContrib.Samples.InputBuilders,包含在 MVC Contrib 中以使其与 Spark View Engine 一起工作,但到目前为止还无法这样做。

有人知道为什么这两个人不能相处吗?

我所做的更改

InputForm.spark:

<viewdata model="SampleInput" />
!{Html.InputForm()}

Global.asax.cs:

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

Web.config:

...
<spark>
    <compilation debug="true"/>
    <pages automaticEncoding="true">
        <namespaces>
            <add namespace="System"/>
            <add namespace="System.Collections.Generic"/>
            <add namespace="System.Linq"/>
            <add namespace="System.Web.Mvc"/>
            <add namespace="System.Web.Mvc.Ajax"/>
            <add namespace="System.Web.Mvc.Html"/>
            <add namespace="System.Web.Routing"/>
            <add namespace="MvcContrib.UI.InputBuilder"/>
            <add namespace="MvcContrib.UI.InputBuilder.Views"/>
            <add namespace="Web.Models"/>
        </namespaces>
    </pages>
</spark>

(我从示例项目中复制了最后三个命名空间。)

我遇到的错误

根据我在 Global.asax.cs 中设置 Spark/InputBuilder 的顺序,我得到两个不同的异常。

如果我先设置 InputBuilder,然后设置 Spark(代码如上所示):

错误 CS1061: 'System.Web.Mvc.HtmlHelper' 没有 包含“InputForm”的定义 并且没有扩展方法'InputForm' 接受类型的第一个参数 'System.Web.Mvc.HtmlHelper' 可能是 找到(您是否缺少使用 指令还是程序集引用?)

如果我先设置 Spark,然后是 InputBuilder:

视图“InputForm”或其主视图 找不到。下列 已搜索位置:

~/Views/Home/InputForm.aspx

~/Views/Shared/InputForm.aspx

~/Views/InputBuilders/InputForm.aspx

~/Views/Home/InputForm.ascx

~/Views/Shared/InputForm.ascx

【问题讨论】:

    标签: asp.net-mvc spark-view-engine mvccontrib


    【解决方案1】:

    将 input.spark 更改为:

    <use namespace="MvcContrib.UI.InputBuilder"/>
    <use namespace="MvcContrib.UI.InputBuilder.Views"/>
    <add namespace="Web.Models"/>
    <viewdata model="SampleInput" />
    !{Html.InputForm()}
    

    添加到 web.config 在 Spark 中不起作用。您可以改用 _global.spark。

    还有另一个问题。在稳定的 Spark 中,SparkView Html 属性的类型为 HtmlHelper,而不是 HtmlHelper&lt;TModel&gt;Html.InputForm() 函数仅适用于 HtmlHelper&lt;TModel&gt;,因此您必须下载 Spark 源代码并使用开发版本,因为它最近已更改。您也可以下载稳定的源并自行更改。这是一些信息:

    http://groups.google.com/group/spark-dev/browse_thread/thread/618bd44a94368d22/f7df24e52924f4dc?show_docid=f7df24e52924f4dc

    【讨论】:

    • 这正是我一直在寻找的那种细节!来自 GitHub 的主版本完美无缺。仅供参考,Spark 确实 支持在 web.config 中添加导入,因此您不必在所有视图中重复它们。您需要做的就是在 configSections 中引用 SparkSectionHandler。无论如何,非常感谢您提供这样一个信息丰富且有用的答案!干杯。
    • 您还可以使用稳定版本并创建自己的派生 SparkView 类,该类公开 HtmlHelper&lt;TModel&gt;:groups.google.com/group/spark-dev/browse_thread/thread/…
    【解决方案2】:

    您在设置输入构建器和火花视图引擎方面走在了正确的轨道上。 您可以从 mvccontrib 的源文件中看到,您需要此命名空间定义的 MvcContrib.UI.InputBuilder.Views 以便您的视图引用输入构建器 HtmlHelper 扩展。

    http://github.com/mvccontrib/MvcContrib/blob/master/src/MVCContrib/UI/InputBuilder/Views/HtmlExtensions.cs

    我编写了输入构建器,但我对 spark 视图引擎的了解不够,无法知道为什么它没有解析对输入构建器的扩展方法的引用。

    【讨论】:

    • 嘿,埃里克,非常感谢您抽出宝贵的时间。不幸的是,我已经在导入 MvcContrib.UI.InputBuilder.Views,正如您在我的 Web.config 中看到的那样;最后三个导入直接从源文件 mvccontrib 示例项目中复制。还有其他线索吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多