tec*_*414 98 asp.net-mvc razor asp.net-mvc-3
我正在尝试基于另一个程序集中的类创建一个强类型视图.无论出于何种原因,我的Razor视图似乎没有对我的项目中引用的其他程序集的任何可见性.例如
@model MyClasses.MyModel
Run Code Online (Sandbox Code Playgroud)
导致Visual Studio 2010中的错误," MyClasses
无法找到类型或命名空间名称(您是否缺少using指令或程序集引用?)."
标准视图引擎中引用的同一个类可以正常工作.我在尝试引用我视图中的类时遇到同样的问题.
我错过了一些关于Razor的东西,还是我需要以其他方式引用装配?
que*_*rin 107
有一个新的配置部分用于引用Razor视图的命名空间.
打开web.config
文件Views
夹中的文件,并确保它具有以下内容:
<configuration>
<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.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="SquishIt.Framework" />
<add namespace="Your.Namespace.Etc" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
Run Code Online (Sandbox Code Playgroud)
或者,您可以将using语句添加到共享布局:
@using Your.Namespace.Etc;
<!DOCTYPE html>
<head>
....
Run Code Online (Sandbox Code Playgroud)
编辑Web.config后,重新启动Visual Studio以应用更改.
V.B*_*.B. 54
我有同样的问题:MVC3项目MyCore.Web从同一解决方案中的另一个项目(使用程序集名称MyCoreDBLayer)引用MyCore.DBLayer命名空间.来自MyCore.DBLayer的所有对象在控制器和模型中都能很好地工作,但在Razor视图中失败并出现错误'类型或名称空间名称'DBLayer'在名称空间'MyCore'中不存在(你错过了程序集引用吗?)'这是显然不是这样的.
将程序集引用添加到根web.config文件的system.web/compilation/assemblies部分修复了该问题.该部分现在看起来像:
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
**<add assembly="MyCoreDBLayer" />**
</assemblies>
</compilation>
...
</system.web>
Run Code Online (Sandbox Code Playgroud)
省略版本,文化,令牌现在还可以,但将来应该修复.
Syl*_*via 12
以上都不适合我;
但我终于找到了对我有用的东西:
这是因为我将构建输出转到bin\Debug\for Debug配置和bin\Release\for Release configuations.一旦我将Build Configuation更改为所有配置的"bin"(如下图所示),那么一切都开始正常工作!
我不知道为什么将你的构建分离到Release和Debug文件夹应该导致Razor语法中断,但似乎是因为某些东西找不到程序集.对我来说,具有剃刀语法问题的项目实际上是我的"剃刀库"项目.它们被设置为Application Projects但是我将它们用作RazorGenerator的类库来编译我的视图.当我实际尝试直接运行其中一个项目时,它导致以下配置错误:
无法加载文件或程序集'System.Web.Helpers,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.该系统找不到指定的文件.
这导致我尝试更改构建输出,因为我注意到对于所有Web项目,构建输出似乎总是直接到bin文件夹,不像类库的默认值,它有发布和调试文件夹.
您似乎在寻找这个答案:https: //stackoverflow.com/a/4136773/176877
也就是说,打开内部Views\Web.Config(不是根目录),并在Pages标签下添加命名空间:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory.../>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
...
<add namespace="System.Web.Routing" />
<!-- Your namespace here -->
</namespaces>
Run Code Online (Sandbox Code Playgroud)
保存,然后关闭并重新打开Razor文件.
如果您正在使用区域,则需要为每个区域中的每个Web.Config执行此操作.
Visual Studio多年来变得越来越困难,因此可能需要关闭运行Debug构建的Razor文件,然后重新打开Razor文件,或者最坏的情况是需要重新启动Visual Studio.但最终它会向您呈现Razor文件,就好像该命名空间列表中的所有内容都位于所有视图顶部的@using语句中一样.
在ASP.NET Core MVC 中,解决方案是using
在 _ViewImports.cshtml 中添加一个,而不是在使用 ASP.NET MVC 5 时将它的 web.config 放在 View 文件夹中。
_ViewImports.cshtml
@using mySolution
@using mySolution.ViewModels // <-- Add this, and place your ViewModel (e.g. LoginViewModel) in here.
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Run Code Online (Sandbox Code Playgroud)
看法
@model LoginViewModel // Add to _ViewImports to make this line work
<div>This is the View for the login screen.</div>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
97362 次 |
最近记录: |