我的ASP.NET MVC 2应用程序分为几个区域.其中一个是主目录中的默认区域,另一个是Account区域目录中的区域.现在,问题是我需要在这两个区域的控制器中使用相同的视图.
如果他们在同一个区域,我会return View("ViewName")这么做,但是我该怎样做才能从我所在地区的控制器中的默认区域返回一个视图Account?有任何想法吗?
据我所知,当一个脚本在Magento之外运行时,在触发事件时不会调用观察者.为什么?我如何解决它?
以下是引导我提出这个问题的原始问题.问题是永远不会调用将应用目录规则的观察者.事件发生,但观察者不接受它.
我正在运行一个加载Magento会话的外部脚本.
在该脚本中,我正在加载产品并抓住一堆属性.一个问题是getFinalPrice()不适用适用于产品的目录规则.
我正在做我知道的所有事情来设置会话,甚至一堆我觉得多余的东西.似乎没有应用这些规则.
这是一个测试脚本:
require_once "app/Mage.php";
umask(0);
$app = Mage::app("default");
$app->getTranslator()->init('frontend'); //Probably not needed
Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton("customer/session");
$session->start(); //Probably not needed
$session->loginById(122);
$product = Mage::getModel('catalog/product')->load(1429);
echo $product->getFinalPrice();
Run Code Online (Sandbox Code Playgroud)
任何见解都表示赞赏.
我正在使用ASP.NET MVC 4,并尝试在不同的项目中使用区域.
我一直在检查这个线程,我们预计ASP.NET MVC2之后不同项目中的区域不支持状态:
在asp.net mvc中,作为单个项目实施的区域与多个项目的优缺点是什么?
任何人都知道它是否真的不再受支持了?
任何人都可以帮我看一下使用ASP.NET MVC 4时是否有一种在分离项目中有区域的常用方法?
我发现这个可能有帮助的其他线程,但正在寻找一种更常见的方式:
ASP.NET MVC 4单独项目中的区域不起作用(查看未找到)
谢谢!
有人可以解释使用新的MVC2区域功能的优缺点吗?
我不明白他们有什么好处.如果我在我的MVC应用程序中添加管理区域,为什么不在主视图和控制器文件夹中创建一个新的Admin文件夹?什么创造一个区域真的让我?
直到昨天ASP.NET MVC的预览版发布之前,我一直迫切需要像"区域"这样的功能,但却不知道它被称为能够找到它的内容.
预览版本将"区域"描述为:
区域 - 提供将大型Web应用程序划分为多个项目的方法,每个项目都可以相对隔离开发.这有助于开发人员通过提供分组相关控制器和视图的方法来管理构建大型应用程序的复杂性.
就我而言,我正在构建一个在线商店作为应用程序的一部分.我想将/store控制器下的所有内容分区为/store/products/和/store/checkout.
ASP.NET 2.0区域功能似乎正是我想要的,但我不能证明为生产应用程序移动它(尽管它非常诱人!).
我注意到Phil在11月发表了一篇关于"分组控制器"的文章 - 实际上名为" ASP.NET MVC中的区域 "
如果有人使用过任何一种方法,那么真的会感兴趣 - 或者说是熟悉这两种方法的人.
我想尽快将我的商店逻辑移到一个单独的"区域" - 但无法决定是否尝试使用Phil的11月解决方案,或者只是冒险在预览版中实施它?我假设即使我的一些代码需要更改 - 我创建的RESTful URL也不需要改变,因此我倾向于尝试'分组控制器'方法.有人试过吗?
http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx
MSDN领域文档:http://msdn.microsoft.com/en-us/library/ee307987(VS.100).aspx
我继续奴役MVC 2的事情:领域......
现在我在主Controllers文件夹和其中一个区域中有两个具有相同名称的控制器(HomeController).两者都有不同的名称空间,所以...理论上应该共存,但它们不会共存.错误是:
控制器名称"Home"在以下类型之间不明确:
Namespace.HomeController
Namespace.Areas.AreaName.Controllers.HomeController
这与Home控制器无关(特殊的?),但适用于任何区域的任何一对.
如何实现不同区域内同名控制器的共存?
谢谢你的时间 :)
编辑:在不同的区域可以使用相同的控制器名称:使用命名空间注册路由可以解决问题(感谢斯科特的艾伦文章).
我正在使用MVC3并在我的应用程序中有区域.一般来说,一切正常,我可以导航到我的区域(例如Admin = Area,Controller = Department),如下所示:
<%: Html.ActionLink("Departments", "DepartmentIndex", "Department", new { area = "Admin"}, null )%>
Run Code Online (Sandbox Code Playgroud)
但是,我注意到的是,如果我没有在ActionLink中指定区域,例如
<%: Html.ActionLink("Test", "Index", "Home")%>
Run Code Online (Sandbox Code Playgroud)
如果我已导航到"管理员"区域,这将停止工作.即我的网址现在是 http:// localhost/myproj/Admin/Home/Index 而不是 http:// localhost/myproj/Home/Index
关于这里发生了什么的任何想法?
创建MVC应用程序/区域时,我的路由是所有默认值.即
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "MyProj.Controllers" }
);
}
Run Code Online (Sandbox Code Playgroud)
我的区域注册
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id …Run Code Online (Sandbox Code Playgroud) 我有一个目前结构的项目
My Project
/Content
/Controller
/View
/Model
/Areas
/Area1
/View
/Controller
/Model
/Area2
/View
/Controller
/Model
Run Code Online (Sandbox Code Playgroud)
所有区域视图都使用根共享_Layout视图,该视图引用根内容目录下的css文件.内容文件夹下的css文件引用具有相同目录的图像或其他内容,如下所示:
.box-shadow
{
-webkit-box-shadow: 0px 5px 80px #505050;
-moz-box-shadow: 0px 5px 80px #505050;
box-shadow: 0px 5px 80px #505050;
behavior: url('../Content/PIE.htc');
}
Run Code Online (Sandbox Code Playgroud)
当我访问'http:// MyProject/controller/action'时,所有这一切都正常,但是当我进入某个区域'http:// root/area/controller/action'时,我的css文件无法找到路径'../Content/PIE.htc'.
我不知道如何解决这个问题所以我想知道是否有人知道如何解决这个问题.
谢谢!
我有一个带有一个基本级控制器("Home")的基本MVC 2(RC2)站点,以及一个带有一个控制器("Abstract")的区域("Admin").当我调用http:// website/Abstract时 - 即使我没有在URL中指定Area,也会调用Admin区域中的Abstract控制器.更糟糕的是 - 它似乎并不知道它在Admin下,因为它找不到相关的视图而只返回:
The view 'Index' or its master was not found. The following locations were searched:
~/Views/Abstract/Index.aspx
~/Views/Abstract/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?这是一个错误吗?一项功能?
我对.net很缺乏经验,刚开始学习MVC.我遇到了一个有关找到多个控制器的问题:
"找到了与名为'reviews'的控制器匹配的多个类型.如果为此请求提供服务的路由('{controller}/{action}/{id}')未指定名称空间来搜索匹配的控制器,则会发生这种情况.如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由."
我最近在我的应用程序中添加了一个新的"Admin"区域,其中我有一个"ReviewController".主app文件夹中还有一个"ReviewController":
啊 - 作为一个新用户,我无法发布图像,但基本上我在"控制器"和"区域/管理员/控制器"中有一个"ReviewController".
到目前为止我设置了2条路线:
Global.asax.vb中的默认路由
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, _
{"PowellCasting/Controllers"}
)
End Sub
Sub Application_Start()
AreaRegistration.RegisterAllAreas()
System.Data.Entity.Database.SetInitializer(New System.Data.Entity.DropCreateDatabaseIfModelChanges(Of Models.PowellCastingEntites))
Database.SetInitializer(Of PowellCastingEntites)(New PowellCastingInitializer())
RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)
ControllerBuilder.Current.DefaultNamespaces.Add("PowellCasting/Controllers")
End Sub
Run Code Online (Sandbox Code Playgroud)
AdminAreaRegistration中的区域路由
Namespace PowellCasting.Areas.Admin
Public Class AdminAreaRegistration
Inherits AreaRegistration …Run Code Online (Sandbox Code Playgroud) 我创建了一个带有区域的新ASP.NET MVC项目,我试图将控制器操作设置为默认控制器操作,如果用户访问该区域.
我添加了一个名为"登录"的区域Areas/Login/,我添加了LoginController.
我试图设置此控制器在用户导航到网站时被调用.如果我输入浏览器www.test.com/Login/Login但我不知道如何设置路由global.asax以指向此控制器作为默认值,我可以访问它.
我如何在ASP.NET MVC中执行此操作?