- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想在 MVC 6 Web 启动项目的单独程序集中定义 View 组件(这是 ASP.NET MVC 6 中的新组件),以便我可以在多个 Web 项目中重用它们。示例解决方案可能如下所示:
我新建了一个类库(Package),在里面新建了一个 View 组件。我还按照嵌套文件夹约定创建了 View 。我的 BookStore.Components
项目如下所示:
当我尝试从我的 Web 项目调用此 View 组件时:
@Component.Invoke("BookOfTheMonth")
...我收到内容正文为空的 500 错误。似乎发现了 ViewComponent 类,但未发现该组件的 Razor View 。
我还尝试扩展 DefaultViewComponentDescriptorProvider
以便可以发现来自 BookStore.Components
程序集的 View 组件:
public class AssemblyProvider : IAssemblyProvider
{
public IEnumerable<Assembly> CandidateAssemblies
{
get
{
yield return typeof(AssemblyProvider).Assembly;
yield return typeof(BookStore.Components.BookOfTheMonthViewComponent).Assembly;
}
}
}
builder.RegisterType<AssemblyProvider>()
.AsImplementedInterfaces();
builder.RegisterType<DefaultViewComponentDescriptorProvider>()
.AsImplementedInterfaces();
我不确定是否需要注册上面的DefaultViewComponentDescriptorProvider
,所以我尝试了有没有它,但是在调用 View 组件的页面上仍然出现500错误.
如何从 MVC6 Web 项目中调用位于单独程序集中的 View 组件?
最佳答案
更新 2017-03-09
在使用 MS Build 的 Visual Studio 2017 中,情况发生了一些变化。幸运的是,它要简单得多。以下是如何让它工作:
在外部程序集中,将其添加到 csproj 文件中:
<ItemGroup>
<EmbeddedResource Include="Views/**/*.cshtml" />
</ItemGroup>
在主 Web 项目中,添加此 NuGet 包:Microsoft.Extensions.FileProviders.Embedded
然后在 Startup 中,将外部程序集添加到 File Providers 列表中:
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProviders.Add(new EmbeddedFileProvider(
typeof(SampleClassInAssembly).Assembly
# Prior to .Net Standard 2.0
# typeof(SampleClassInAssembly).GetTypeInfo().Assembly
));
});
我暂时将原始答案留在下面,以防人们仍在尝试让它与旧版本的 .Net Core 和 project.json
一起使用。
============================================= =================
以下是完成这项工作的步骤。
在web项目的Startup.cs
中注册CompositeFileProvider
:
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProvider = new CompositeFileProvider(
new EmbeddedFileProvider(
typeof(BookOfTheMonthViewComponent).GetTypeInfo().Assembly,
"BookStore.Components"
),
options.FileProvider
);
});
CompositeFileProvider
和 EmbeddedFileProvider
都是新的,因此您需要从 aspnetvnext
NuGet 提要中获取它们。我通过添加此源来做到这一点:
在project.json
中添加依赖:
"Microsoft.AspNet.FileProviders.Composite": "1.0.0-*",
"Microsoft.AspNet.FileProviders.Embedded": "1.0.0-*",
最后,将其添加到 Components
程序集的 project.json
中:
"resource": "Views/**"
这应该足以让它工作。
这是一个工作演示: https://github.com/johnnyoshika/mvc6-view-components/tree/master
这个答案是从这里的讨论中得出的:https://github.com/aspnet/Mvc/issues/3750
更新 2016-01-15目前外部 View 组件存在一个痛苦的问题。您对 View cshtml 文件所做的任何更改都不会自动重新编译。即使是强制 Visual Studio 清理和重建也无法做到这一点。您需要更改组件程序集中的 .cs 文件才能触发 View 重新编译,但看起来这将在未来得到纠正。此处解释了此问题的原因:https://github.com/aspnet/Mvc/issues/3750#issuecomment-171765303
关于c# - ASP.NET MVC 6 : view components in a separate assembly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34236850/
我试图对 ASP.Net MVC 有一个高层次的理解,我开始意识到它看起来很像原始的 ASP 脚本。过去,我们将“模型”/业务逻辑代码组织到 VBScript 类或 VB COM 组件中。 当然,现在
我已经搜索了一段时间,但似乎找不到答案。 我想在我的旋转木马中显示一个计数器,左边是当前项目(工作),左边是项目总数。 我的代码:
. 最佳答案 Scott Gu 称这些为代码块。这就是我的看法。 http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax
我有一个使用 Visual Studio 2010/.net 4/VB 制作的网站。 我真的很喜欢我发现的 FAQ 系统的布局,因为它很简单,但它是经典的 asp。所以,显然,我不能包括我的母版页布局
好吧,对于你们许多人来说,这个问题可能有一个非常明显的答案,但它让我难住了。 我有一个 asp.net Web 表单,上面有两个控件(嗯,不止这两个,但我们将重点关注这些) - 第一个是 asp:dr
当我将 ASP.NET 复选框控件设置为 asp.net 更新面板的异步回发触发器时,EventName 属性是什么? 最佳答案 我相信它是 CheckedChanged。 关于asp.net - a
我有一个用经典 asp 编写的(巨大的)网站。现在我必须切换到 vb.net (razor)。有没有办法将这两个结合起来直到切换完成? 有没有办法让应用程序与经典的 asp 和 vb.net 一起工作
I am creating a products page, where the user selects an option in a radiobuttonlist for example, an
我最近将一个经典的 ASP 应用程序转换为 ASP.NET 3.5,但我觉得我的经典 ASP 版本要快一些(我不知道可能买家会后悔)。 所以你们能帮我解决这个问题吗,让我知道哪个更快,asp、asp.
从本周开始,我被要求开始学习如何使用 ASP 开发网站。我通过 XNA 对 C# 有一定的经验,所以这部分对我来说并不是什么麻烦。 我一直在关注Music Store Tutorial这需要我设置一个
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我想将一些表单变量发布到经典 ASP 页面中。我不想改变经典的 ASP 页面,因为需要完成大量的工作,以及消耗它们的页面数量。 经典的 ASP 页面需要将表单变量 Username 和 Userpas
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在某种程度上,这可能是一个异端问题。我们有一个大型站点,其中许多页面仍在ASP中。通常,并没有真正动态的,而是包括(通过SSI或Server.Execute)定期重新生成的HTML块。看起来好像是一个
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有一个遗留的 ASP 应用程序——在不久的某个时候——需要迁移到 ASP.Net 2.0(以与也在 2.0 中的其他应用程序兼容)。 对于这类事情是否有最佳实践,即作为第一步将当前 html、vbs
我目前在一家公司工作,该公司使用 ASP.NET Webforms 和旧 ASP 页面的组合进行 Web 开发。这对于他们当前的项目来说效果很好,但我想说服/建议他们切换到 ASP.NET MVC,因
我有一个经典的 asp 应用程序。我想将该页面的竞赛表格发布到 Asp.Net 表格。原因是我想在进入数据库之前使用我在 Asp.Net 页面中内置的大量逻辑进行验证,而我对 asp 不太了解。更不用
我知道在 ASP.NET MVC 中,您可以拥有移动 View 并执行类似 Index.mobile.cshtml 的操作。和 _Layout.mobile.cshtml并且服务器知道将这些 View
我需要从一些服务器端 c#.net 代码中调用经典 asp 页面上的 VBscript 函数 - 有谁知道一种干净的方法来做到这一点?在 .net 中重写函数不是一种选择。 我会再解释一下这个问题..
我是一名优秀的程序员,十分优秀!