在ASP.NET MVC中添加视图引用

10

我正在将一个来自Infragistics的控件库引用添加到我的ASP .NET MVC 3 Razor视图中,以使用它们的控件。我已经将dll作为引用添加到项目中。

reference
reference properties

如果我在文件顶部添加using Infragistics.Web.Mvc,那么我的控制器可以正常访问命名空间。

有两种方法可以告诉视图包含命名空间。第一种方法是在视图顶部放置@using Infragistics.Web.Mvc。但是,如果我尝试这样做,我会收到以下错误:

The type or namespace name 'Infragistics' could not be found (are you missing a using directive or an assembly reference?)

第二种方法是在视图Web.config的页面部分中添加对该命名空间的调用,如下所示:

<system.web.webPages.razor>
   <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=ABCABCABCABCABC" />
   <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
         Other namespaces...
         <add namespace="Infragistics.Web.Mvc"/>
      </namespaces>
   </pages>
</system.web.webPages.razor>

但是这也没有起作用。

我唯一能做到的就是将以下行添加到根 Web.config 文件中:

<system.web>
   <compilation debug="true" targetFramework="4.0">
      <assemblies>
         ...
         <add assembly="Infragistics.Web.Mvc, Version=3.11.1.2010, Culture=neutral, PublicKeyToken=blahblahblah" />
      </assemblies>
   </compilation>

在进一步研究Web.config时,我发现通过包含该行代码告诉编译器在编译ASP .NET资源时使用该资源。我不得不使用SN.exe查找PublicKeyToken。

我做错了什么?


你在Visual Studio项目中添加了引用吗? - mnsr
是的,这就是我在那行中所说的“我已经将dll添加为项目的引用”。 - dnatoli
3个回答

21

我不确定Infragistics的安装方式或您如何运行您的网站,但您可能需要告诉Visual Studio在构建时复制dll文件,以便将其包含在Web项目中。在探索其他选项之前,检查一下这个很值得。

以下是一个例子:

输入图像说明


1
就是这样!将“复制本地”设置为true并删除编译标签,它就可以工作了。 :D - dnatoli
对我也起作用了。但是你只能获得特定的控件列表。如何使用WebDropDown控件? - Shumii
不错,兄弟!谢谢! - NoWar
以下是有关使用Infragistics ASP.NET MVC助手入门的更多信息:http://help.infragistics.com/Doc/jQuery/Current/CLR4.0?page=Adding%20NetAdvantage%20Controls%20to%20an%20MVC%20Project.html - Ambrose Little

4

看起来,您的代码并没有将以下内容放入web.config文件中:

<pages>
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />

    ...

    <add namespace="Infragistics.Web.Mvc" />
  </namespaces>
</pages>

这将告诉你的视图引擎(Razor或其他)使用Infragistics DLL作为扩展。

如果您正在使用Razor,请查找View\web.config中的“namespace”标记。如果您喜欢,可以在那里指定命名空间。

希望能对您有所帮助。


如果我在视图文件中使用"@using Infragistics.Web.Mvc",则不需要在Web.config中包含命名空间调用。在其中添加命名空间可使其在所有视图中可用。但是,在我的情况下,没有程序集调用,无论是将命名空间放在哪里或使用"@using"都无法工作。 - dnatoli
如果这个也不行,那么可能是Infragistics安装损坏了? - Iridio

1

很不幸,你在这里遇到了一些奇怪的问题 - 只需添加引用和包含命名空间的步骤就足以使其正常工作。

在我的应用程序中,web.config 中没有 assemblies 元素的条目,只有一个 @using(例如 MVC grid @using MvcContrib.UI.Grid) ,一切都运行良好。我知道这并不能帮助解决问题,但至少你知道这样“应该”可以工作。

在你添加引用到该程序集时,你是从哪个位置添加的?你的 using 语句后也不需要分号。


1
我从本地计算机的Program Files文件夹中添加了它。 - dnatoli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接