标签: asp.net-mvc-areas

Asp.net MVC - 从区域渲染局部视图

我创建了一个区域,可以处理我们所有开发产品中的一些通用的东西,就像登录,HTML帮助器等.在该区域内,我有一个局部视图,我试图在该区域之外引用.我已经注册了该地区

public class Routes : AreaRegistration
{
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Common_default",
            "Common/{controller}/{action}/{id}",
            new {
                controller = "Account",
                action = "Index",
                id = UrlParameter.Optional
            });
    }

    public override string AreaName
    {
        get { return "MvcCommons"; }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在常规项目中,我试图在MvcCommons区域中引用一个视图......

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>TestGrid</h2>

<% Html.RenderPartial("jQGridTable", ViewData.Model); %>
Run Code Online (Sandbox Code Playgroud)

但我一直认为没有找到视图.之前,在创建MVC Commons项目时,我收到了查看错误,但错误告诉我它在区域文件夹和默认视图文件夹中都有查看.这次,我只获取默认文件夹.有没有办法实现这个目标?

感谢大家!

c# asp.net-mvc renderpartial asp.net-mvc-areas

6
推荐指数
1
解决办法
1万
查看次数

ASP.NET MVC区域中的自定义错误覆盖

我想要一个MVC区域独有的自定义错误页面.不幸的是,似乎Web.config覆盖系统没有考虑MVC文件夹结构.如果我想覆盖一个名为"mobile"的区域,我必须创建一个名为"mobile"的根项目文件夹(在视图和控制器中),并将Web.config放在那里,并使用新customErrors元素.

有没有更好的方法来执行此操作,以便我不必为任何覆盖创建根文件夹?

asp.net-mvc custom-errors asp.net-mvc-areas asp.net-mvc-2

5
推荐指数
1
解决办法
2197
查看次数

ASP.NET MVC 4 - 2个带有分段的区域,1个没有分区的区域

我刚刚创建了一个全新的ASP.NET MVC 4解决方案并添加了3个区域,并希望它们按照指示进行路由:

1. General         -> http://www.mysite.com/
2. Members         -> http://www.mysite.com/members/
3. Administration  -> http://www.mysite.com/administration/
Run Code Online (Sandbox Code Playgroud)

我可以配置路由,以便"常规"区域在它是第一个段时起作用,但是当我不希望"常规"在URL中显示为段时,似乎无法让我的路由在所有3个区域中工作.正如您所看到的,我的目标是建立一个干净的URL结构.

我计划在每个区域下添加一些控制器/视图,并希望维护这个区域组织.

我已经看到了类似的MVC 2问题,但我不确定区域注册的顺序是否会纠正我的特定问题.

asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-4

5
推荐指数
1
解决办法
2078
查看次数

将MVC内容文件夹放入Area

首先,我明白,MVC 3默认模板的Content文件夹不是强制性的css/img/etc.商店文件夹.

我仍然喜欢将Content文件夹的概念作为图像和样式表的"可引用"存储位置以及其他可能的东西(我还将整个jQuery自定义控件放入Content带有.js文件的子文件夹中).

Area到目前为止,我还没有在我的项目中使用过MVC ,因为我没有足够复杂的MVC .现在是时候了.

我正在考虑Content在每个文件夹中放置一个单独的文件夹Area.它会起作用吗?有什么"坏"可以摆脱它吗?像我一样无法通过它参考资源../Content/MyControl?或者MVC Area就像项目的根,但是一个单独的?

asp.net-mvc asp.net-mvc-areas asp.net-mvc-3

5
推荐指数
1
解决办法
4327
查看次数

在我的bin部署MVC4应用程序中我的区域路由有什么问题?

我刚刚在我的网站主机上部署了一个MVC4 .NET 4.0应用程序,用于"实时"部署测试.非区域路线工作正常,例如我的

@Html.ActionLink("Register as a Client", "Register", "Account", new { registrationType = "Client"}, null)
Run Code Online (Sandbox Code Playgroud)

链接工作正常,链接打开正确的页面.但是,通过指向基于区域的操作的链接,如下所示:

@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, null)
Run Code Online (Sandbox Code Playgroud)

实际呈现给浏览器的链接缺少动作和控制器,即

http://mylivedomain.com/?Area=Author&registrationType=Author
Run Code Online (Sandbox Code Playgroud)

值得注意的是,MVC4的css捆绑功能在部署后无法正常工作,我回过头来使用经典样式链接到各个样式表.

可能相关:我的问题:为什么我的MVC4应用程序中未经修改的模板代码尝试两次注册区域?

JUST IN:从区域路由映射中删除默认路由的默认操作解决了这个问题.在VS2012模板代码中没有默认控制器.

asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-4

5
推荐指数
1
解决办法
1719
查看次数

便携式区域与多个项目区域?

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

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

我在单独的项目或便携式区域看到了很多区域的例子.但我无法做出决定.

在我看来,我的观点是 :

单独的项目

  • 简单
  • 难以管理内容(JS,CSS,...).它必须在主站点吗?
  • 最佳表现

便携式区域

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

谢谢,

asp.net-mvc mvccontrib asp.net-mvc-areas portable-areas

5
推荐指数
1
解决办法
1312
查看次数

MVC区域路由 - 带文件夹的控制器文件夹

目前我有一个像这样的文件夹结构:

Area (folder)
 - Toolkit (folder)
    - Controllers (folder)
        - AdminController.cs
    - Views (folder)
        - Admin (folder)
           - Privledges (folder)
              - Create.cshtml
              - Edit.cshtml
              - Delete.cshtml
Run Code Online (Sandbox Code Playgroud)

这转化为

/Toolkit/{controller}/{action}/{tool}/{id}
Run Code Online (Sandbox Code Playgroud)

将操作设置为像控制器那样基于字符串{tool}参数和传递给操作的参数{id}来提供视图是不是一种不好的做法?

实现我所说的:

    private const string FOLDER_PRIVILEGES = "./Privileges/";

    public ActionResult Privileges(string tool, string id = "")
    {
        dynamic viewModel = null;
        ToolViews view; // enum for the views
        // Parse the tool name to get the enum representation of the view requested
        bool isParsed = Enum.TryParse(tool, out view);

        if (!isParsed)
        {
            return …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc routing asp.net-mvc-areas asp.net-mvc-3

5
推荐指数
1
解决办法
1181
查看次数

MVC控制器.执行区域

我在MVC4中有一个使用区域的网站.在某些区域(让我们称之为区域),我有一个控制器(控制器)与此操作:

public ActionResult Index()
{
    return View();
}

public ActionResult OtherAction()
{
    return View("Index");
}
Run Code Online (Sandbox Code Playgroud)

如果我像这样简单地重定向到Area/Controller/OtherAction,这很有用:

return RedirectToAction("OtherAction", "Controller", new { area = "Area" });
Run Code Online (Sandbox Code Playgroud)

但我需要(检查这里为什么)进行这样的重定向:

RouteData routeData = new RouteData();
routeData.Values.Add("area", "Area");
routeData.Values.Add("controller", "Controller");
routeData.Values.Add("action", "OtherAction");
ControllerController controller = new ControllerController();
controller.Execute(new RequestContext(new HttpContextWrapper(HttpContext.ApplicationInstance.Context), routeData));
Run Code Online (Sandbox Code Playgroud)

在那种情况下,它不起作用.在最后一行之后,执行OtherAction方法,然后在此代码的最后一行中抛出此异常:

未找到视图"索引"或其主数据或视图引擎不支持搜索的位置.搜索了以下位置:

〜/查看/控制器/ Index.aspx的

〜/查看/控制器/ Index.ascx

〜/查看/共享/的Index.aspx

〜/查看/共享/ Index.ascx

〜/查看/控制器/ Index.cshtml

〜/查看/控制器/ Index.vbhtml

〜/查看/共享/ Index.cshtml

〜/查看/共享/ Index.vbhtml

为什么会发生这种情况,我该如何解决?

redirect asp.net-mvc-areas asp.net-mvc-4

5
推荐指数
1
解决办法
2209
查看次数

如何使用app_start或webactivator注册区域?

我想避免打电话

AreaRegistration.RegisterAllAreas()

在我的global.asax中,因为我试图将所有启动逻辑移动到App_Start文件夹中的各个类中.但是,我没有成功地让它发挥作用.第一个选项尝试使用这样的代码:

[assembly: PreApplicationStartMethod(typeof(Startup), "PreInit")]
namespace Foo
{
  public class Startup {}
}
Run Code Online (Sandbox Code Playgroud)

PreApplicationStartMethod来自System.Web名称空间的位置.在这种情况下,对寄存器区域的调用过早发生.

第二种方法基于David Ebbo的这篇文章,使用WebActivator:using System.Web.Mvc;

    [assembly: WebActivatorEx.PostApplicationStartMethod
(typeof(AreaDemo.AreaConfig), "RegisterAreas")]
    namespace AreaDemo
    {
        public class AreaConfig
        {
            public static void RegisterAreas()
            {
                AreaRegistration.RegisterAllAreas();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,尽管没有抛出错误,但尝试导航到该区域失败(好像注册从未发生过).

使用程序集指令而不是从Global.asax直接调用,从启动类中注册ASP.NET MVC 5中的区域的正确方法是什么?

更新1:这是我的AreaRegistration代码:

public class AdminAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Admin";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-areas webactivator

5
推荐指数
1
解决办法
1451
查看次数

Visual Studio 2017增加了缺失的区域

在使用VS2017创建ASP.NET MVC Core Web应用程序时,遇到上下文菜单中缺少"添加区域"选项.

asp.net-mvc asp.net-mvc-areas .net-core asp.net-core visual-studio-2017

5
推荐指数
2
解决办法
1716
查看次数