问题标签 [portable-areas]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
534 浏览

msbuild - T4MVC 与 TeamCity 上的便携式区域

我有一种情况,我们有一个使用便携式区域T4MVC的解决方案,它有一个单独的 T4MVC 项目,其中为 7 个便携式区域和主 MVC3 应用程序生成了所有文件。我们已按照此处的说明进行操作,我们会在构建解决方案时自动生成类。

虽然在 VS2010 中,这在调试和发布版本中都可以正常工作,但我遇到问题的地方是我试图让它在 TeamCity 上运行。

我已按照此处在构建服务器上设置 T4 的说明进行操作,如果在构建服务器上运行 msbuild,我可以看到它能够启动 TextTemplate.exe 并查看生成文件,问题是它永远找不到文件进行改造。

在执行与在 TeamCity 上运行的相同构建脚本时,我设法在本地计算机上重现了相同的行为。

执行此操作时,我从 msbuild 中获得以下输出,并设置了 /v:diag:

看起来,在构建服务器上,T4 似乎无法找到它需要引用以生成必要类的项目。我尝试了输入文件夹和程序集引用的各种组合,但发现无法让 T4 “看到”它需要的文件。

有人知道如何解决这个问题吗?

0 投票
1 回答
700 浏览

html - IE - 状态栏显示不断加载

我有一个 razor MVC 页面 - 它是通过 MVC Portable Areas 加载的。当我浏览到索引操作时,一切正常,并且按预期工作。

...但有时 Internet Explorer 会不断在状态栏中显示加载栏。加载永远不会完成,但页面功能工作正常(所以它一定已经加载了我所有的资源)

我无法在 firefox 中复制它,并且我检查了 firebug 上的 Net 选项卡以查找加载缓慢的资源,但一切看起来都很好。

我想尝试让加载栏在设定的时间后停止(我知道这可能掩盖了一个问题,但我似乎无法找出页面出了什么问题!!)有没有办法做这个?

0 投票
1 回答
1474 浏览

asp.net-mvc - 便携式区域与多项目区域?

你能告诉我这两种实现的优点/缺点吗?

我的背景:我们有一个包含许多不同领域的大型项目。每个域自然是一个区域。但是许多不同的团队将在每个团队上工作,我们希望将业务规则分开。在解决方案中管理这些领域的最佳方法是什么?

我在单独的项目中或带有便携式区域的区域中看到了许多示例。但我无法做出决定。

在我看来,我的观点是 :

独立项目

  • 简单的
  • 难以管理内容(JS、CSS、...)。它必须在主站点中吗?
  • 最佳表演

便携式区域

  • 所有内容、视图必须在同一个项目中
  • 区域之间可能的代码重复
  • 约束:名称,嵌入式资源,...
  • MVC Contrib 的一部分:它会支持更长时间吗?
  • 组件:重新分配功能的理想选择

谢谢,

0 投票
1 回答
131 浏览

c# - 我可以从 Web 应用程序向 MvcContrib.Bus 上的便携式区域发送消息吗

在我陷入困境之前,我想知道是否有人这样做过。

我看到的所有 MvcContrib.Bus 示例都显示了便携式区域向主机发送的消息。我希望能够将消息从主机发送回便携式区域,并想知道这是否可能。

0 投票
2 回答
1442 浏览

asp.net-mvc - MVC4 便携式区域?

MVC4 是否删除了 MVCContrib 要求以实现可移植区域?或者这仍然是必需的?

我在没有 MVCContrib 的情况下试了一下,不幸的是,我遇到了一个典型的“未找到视图‘索引’或其主控,或者没有视图引擎支持搜索到的位置。 ”异常。

搜索到的位置列表包括“ ~/Areas/Inbox/Views/Default/Index.cshtml ”,这在技术上是正确的,但只是没有找到视图。

一些解释:

我有一个主 MVC4 应用程序和一个“插件”(如果你愿意的话)MVC4 应用程序,其中包含一个名为 Inbox 的区域,其中包含一个名为 Default 的控制器和视图。我在主应用程序中引用了这个插件应用程序,我可以在返回视图的 DefaultController 的 Index 方法中打一个断点 - 所以我知道主应用程序正在使用插件应用程序并将请求路由到正确的控制器等等。不运行时,如果我将光标悬停在 DefaultController 中的 return View() 语句上,气球会显示所需的视图,它只是在运行时找不到。

有没有人遇到过这个?我确信这对我来说是非常简单和愚蠢的疏忽,但经过数小时的尝试,我找不到解决方案。提前致谢!

0 投票
1 回答
316 浏览

asp.net-mvc-4 - MVC4 + MvcContrib + 共享布局?

我在单独的程序集中有一个可移植区域,并希望通过调用主程序集中的共享 _Layout.cshtml 中的 RenderBody() 来填充其视图。但我得到的结果是 View 本身的内容,好像 _Layout.cshtml 甚至没有呈现。此外,视图中定义的任何区域(在便携式区域中)都没有被渲染——这实际上是预期的,因为 _Layout.cshtml 似乎完全被忽略了。

那么我做错了什么还是我误解了便携式区域的设计方式?我真的希望使用此功能将视图和区域移动到可移植区域,同时在主 Web 应用程序中保持“母版页”功能。

0 投票
2 回答
830 浏览

c# - 便携式区域具有相同的控制器/文件夹

我正在使用 MVC 3 和 MVC Contrib 来拥有便携式区域。问题是,便携式区域具有相似的视图(例如主页、用户管理...)。

例如,每个可移植区域都有一个 Home 视图 (Views/Home/Index.cshtml) 和一个 Home Controller (Controllers/Home.cs)。设置路由以便访问该页面,我将转到 MySite/PortableAreaName/Controller/View。

问题是它只加载第一个便携式区域的主页和用户管理页面。它首先找到该视图,然后加载它,而不考虑 URL 中指定的区域。

我可以为所有内容添加前缀(例如,Area1Home、Area1UserManagement),但我宁愿找到一个更具可扩展性的解决方案。如果我们得到 50 多个可移植区域,每个区域有 10 个视图,我们要么必须跟踪我们使用的视图名称,要么为每个视图添加前缀。

有什么建议么?如果您需要更多信息,请告诉我。

更新 1 - 没有工作

使用 twang 提供的文章解决,并将以下代码添加到主项目(链接文章中的“PortableAreas”)。

文章:http ://elegantcode.com/2012/04/06/mvc-portable-areas/

主项目 > Global.asax.cs

便携式区域 > MyPortableAreaRegistration.cs

据我了解,以下位置是资源的默认位置:

  • MyPortableArea/内容/图像
  • MyPortableArea/脚本

只要您将资源保存在这些文件夹中,就不应注册它们。

更新 2

之前的修复不起作用。即使使用上面的代码,它有时仍然会加载错误的视图、资源等。有人知道如何解决这个问题吗?

当我调试时,它转到正确的控制器和该控制器中的正确视图,但加载了错误的视图(例如,使其进入区域 2 的控制器和区域 2 的主页方法,但加载区域 1 的主页。

例如,我有 2 个便携式区域,但它总是加载第一个

MyPortableArea1/Controls/Home、MyPortableArea1/Scripts/Views/Home/index.js MyPortableArea2/Controls/Home、MyPortableArea2/Scripts/Views/Home/index.js

我认为这是因为它一次注册了所有这些?然后,当它找到路由的匹配项时,它使用第一个匹配项(有时是错误的)。

更新 3

单步执行代码后,我的布局中的部分似乎没有正确加载。例如,它到达 MyPortableArea2 的 HomeController > Index(),加载布局,然后布局在 @RenderBody() 部分加载 MyPortableArea1 的内容。

更新 4

从http://mvccontrib.codeplex.com/更新到最新版本的 MvcContrib 。这没有用。

更新 5

所以我做了一个小测试,弄清楚为什么它加载了错误的页面:它根本找不到区域。就好像它甚至不在系统中一样!

例如 PortableArea1/Home/Index

例如 PortableArea2/Home/Index

当它加载错误的页面时,我现在收到一条错误消息,提示找不到视图。为什么它不加载我的便携式区域?

0 投票
1 回答
430 浏览

asp.net-mvc - 使用 Html 帮助器时可移植区域 MVC 视图表单中的 NullReference

更新

考虑到罪魁祸首是 MvcContrib 依赖项和 .NET 4.5 Web 应用程序之间存在一些冲突,我试图避免使用 MvcContrib PA,所以我完全重建了一个新的解决方案而不使用它们(我正在试验 Autofac + MEF)。然而,即使在这个解决方案中,我也得到了完全相同的错误。通过在我的视图中注释掉一行,事实证明,有问题的方法是模型的 Title 属性的 @Html.EditorFor 。如果我用@Html.TextBoxFor 替换它,一切似乎都正常。所以这似乎排除了 PA 和 MvcContrib 的任何问题。任何想法?

原帖

我在使用带有一些便携式区域(http://lostechies.com/erichexter/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib/)的 MVC4 Razor 应用程序时遇到了一个奇怪的问题,其中在我的区域视图中使用 HTML 助手时突然开始抛出异常。例外情况如下:

我认为相关的代码是:

如果我注释掉两个li的内容,一切正常。如果我取消注释它们,只要操作方法返回其结果,我就会得到异常。我可以确认传递给视图的模型不为空,我什至可以无错误地访问其字段,例如通过添加带有@Model.Title的段落。我尝试在任何@Html...行中设置断点,但它没有被命中,并且抛出了相同的异常。

看起来我的便携式区域(包括视图)有问题,但我没有从这个异常中得到任何线索。这是我用 PA 构建整个架构的过程,至少这对像我这样的新手有用(VS2012、C#、MVC4):

a) 创建一个新的空白解决方案。在其中,创建一个包含 PA的新类库项目。使用 NuGet 将MvcContrib.Mvc3-ci添加到此项目,以及对MVC 程序集的引用(System.Web.Mvc、System.Web.Routing、System.Web.Razor 等:我刚刚从我的主机复制了所有与 MVC 相关的引用网络项目 - 见下文 (b)-)。创建您的PA 文件夹,其中包含控制器、模型和视图的子文件夹。将视图设置为嵌入式资源,并添加一个派生自PortableAreaRegistration的区域注册类(在 PA 文件夹的同一命名空间中),如下所示:

此外,在 Areas 文件夹中添加一个最小的 web.config:

在 Views 文件夹中,我放置了一个 _ViewStart.cshtml(我从主机 Web 应用程序中获取)。

b) 创建一个主机 Web 应用程序,引用 PA 项目和相同的 MvcContrib。在global.asax中添加对PortableAreaRegistration.RegisterEmbeddedViewEngine()的调用,使其看起来像这样:

我还在这个 Web 应用程序中添加了一个(非便携式)区域(用于管理目的);在那里,在 Areas 文件夹中,我确保 web.config 中的 pages 元素具有 validateRequest="false" (http://www.myclojureadventure.com/2010/06/mvccontrib-portable-areas-part-1.html)。然后我可以在我的路线中指定区域名称(当然,Resharper 之类的工具会在视图中发出错误信号,但我可以放心地忽略它)并且我被带到 PA,就好像它实际位于主机 Web 应用程序中一样.

0 投票
2 回答
879 浏览

asp.net-mvc-4 - 便携式区域找不到嵌入文件 MVC4 C#

我有一个包含两个项目的解决方案。一个可移植区域项目,以及一个引用可移植区域项目的网站,并且两者都引用 MvcContrib。

我遇到的问题是嵌入式资源,当我尝试访问它们时,它们给了我一个 404 错误。似乎它正在尝试访问物理路径而不是 dll。部分视图工作正常。

我试图访问的文件在我的 Visual Studio 解决方案资源管理器中看起来像这样

AdHocReporting/Areas/AdHocReportBuilder/Content/adhoc.css(嵌入构建动作)

这是便携式区域的路由:

这是对便携式区域的引用的网站 Global.aspx

这是我的解决方案探索的图像:

解决方案资源管理器

0 投票
0 回答
700 浏览

asp.net-mvc - 如何在 nUnit 测试中注册 MVC4 可移植区域和路由?

我的 MVC4 解决方案包含三个项目:

  1. Web,一个 MVC 4 Web 应用程序
  2. MyAccount,一个便携式区域
  3. 测试,一个利用 nUnit(和 moq)的类库

Web 的 global.asax 定义了一些路由,MyAccount 也是如此(在其 PortableAreaRegistration 的实现中)。

在我的 nUnit 测试中,我需要获取整个解决方案的一组路由。我可以使用以下代码获取在 Web 中定义的路由:

当我尝试使用它扩展它以包括便携式区域时:

我收到 InvalidOperationException:“由于对象的当前状态,操作无效。” 在RegisterArea()通话中。

将此代码放在测试本身或 TestFixtureSetUp 方法中对错误没有影响。

构造AreaRegistrationContext函数有一个可选的第三个参数,它是一个object state. 默认情况下,它为空。给它一个空对象(new {}new object {})并不能解决错误。我无法找到任何关于该state对象可以或应该是什么的文档。

使用AreaRegistration.RegisterAllAreas()调用而不是注册特定区域会导致错误消息“InvalidOperationException:在应用程序的预启动初始化阶段无法调用此方法。”

我看到这些区域注册行的示例在 MVC2 项目中可用而没有此错误。MVC4 有什么不同之处会改变我应该如何设置它吗?