gpt4 book ai didi

c# - 维护单个项目区域中的 View 的解决方案

转载 作者:行者123 更新时间:2023-11-30 12:36:59 25 4
gpt4 key购买 nike

我只在单个项目区域中尝试过。因此,如果有人在多项目领域解决方案中尝试这样做,请告诉我们。

区域支持已添加到 MVC2。但是,您的 Controller 的 View 必须位于您的主视图文件夹中。我在这里介绍的解决方案将允许您在每个区域中保留您的区域特定 View 。如果您的项目结构如下,博客是一个区域。

+ Areas          <-- folder
+ Blog <-- folder
+ Views <-- folder
+ Shared <-- folder
Index.aspx
Create.aspx
Edit.aspx
+ Content
+ Controllers
...
ViewEngine.cs

将此代码添加到 Global.asax.cs 中的 Application_Start 方法。它将清除您当前的 View 引擎并改用我们的新 ViewEngine。

// Area Aware View Engine
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new AreaViewEngine());

然后创建一个名为 ViewEngine.cs 的文件并添加以下代码。

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web.Mvc;

namespace MyNamespace
{

public class AreaViewEngine : WebFormViewEngine
{
public AreaViewEngine()
{
// {0} = View name
// {1} = Controller name

// Master Page locations
MasterLocationFormats = new[] { "~/Views/{1}/{0}.master"
, "~/Views/Shared/{0}.master"
};

// View locations
ViewLocationFormats = new[] { "~/Views/{1}/{0}.aspx"
, "~/Views/{1}/{0}.ascx"
, "~/Views/Shared/{0}.aspx"
, "~/Views/Shared/{0}.ascx"
, "~/Areas/{1}/Views/{0}.aspx"
, "~/Areas/{1}/Views/{0}.ascx"
, "~/Areas/{1}/Views/Shared/{0}.aspx"
, "~/Areas/{1}/Views/Shared/{0}.ascx"
};

// Partial view locations
PartialViewLocationFormats = ViewLocationFormats;

}

protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
return new WebFormView(partialPath, null);
}

protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
return new WebFormView(viewPath, masterPath);
}

} // End Class AreaViewEngine

} // End Namespace

这将查找并使用您在您所在区域创建的 View 。

这是一种可能的解决方案,可以让我在指定区域保留 View 。还有其他人有不同的、更好的、增强的解决方案吗?

谢谢

最佳答案

很抱歉告诉你这个,但你一定漏掉了什么。我目前让您的场景与 ASP.NET MVC 2 RC 开箱即用。

我假设您拥有所有注册路由并且在您所在区域的 View 文件夹中拥有正确的 web.config 文件?

也许看看this walk through ,尤其是关于创建区域的部分。

HTH,
查尔斯

编辑:好的,所以你不高兴加入额外的 new { area = "blog' }, null - 很公平,我承认它很琐碎......但你还打算做什么做什么?

当您有两个同名的 Controller 时会发生什么?一个在您的根项目中,一个在一个区域中,或者两个 Controller 在两个不同的区域中具有相同的名称?它如何找到正确的 View ?

此外,我发现您的 ViewLocationFormats 存在问题。所有区域 View 位置都没有引用其区域......例如~/Areas/{1}/Views/{0}.ascx - 它怎么知道哪个区域?

如果您建议将所有不同区域的 View 都放入其 Controller 名称下的 Areas 文件夹中,然后在 ViewsViews/Shared 下找到 - 我强烈建议不要这样做......它很快就会变得一团糟。

那么,这会给您带来什么影响呢?它确实让您需要在创建路线时指定区域。归根结底,虽然指定区域很麻烦,但确实没有其他办法。

关于c# - 维护单个项目区域中的 View 的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2188314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com