某些機構嘗試Spark View Engine用asp.net mvc 2預覽2?我有一個區域的問題。asp.net mvc 2預覽2和星火
它看起來很喜歡火花引擎外觀**。* spark *文件只在Views文件夾內而不是Areas文件夾中。
我的問題是:
某人有信息如何添加呢?
某些機構嘗試Spark View Engine用asp.net mvc 2預覽2?我有一個區域的問題。asp.net mvc 2預覽2和星火
它看起來很喜歡火花引擎外觀**。* spark *文件只在Views文件夾內而不是Areas文件夾中。
我的問題是:
某人有信息如何添加呢?
Spark不會自動檢查當前版本中的區域視圖位置。如果你願意改變源代碼(我假設你是如果你正在做mvc 2的東西),這裏是修復:
你必須修改文件src \ Spark.Web.Mvc2 \ Descriptors \ AreaDescriptorFilter.cs,使其如下(強調的**變化)寫道:
注:我沒有機器,我這樣做是與我同去,所以在格式字符串中的斜線可能需要是正斜槓。
此外,可以在您自己的代碼中創建此類並在註冊視圖引擎時將其傳入,但我不記得配置代碼。
這是我做過的方法,因爲我想盡可能少地修改火花源。
public class AreaDescriptorFilter : DescriptorFilterBase
{
**private const string areaPathFormatString = "~\\Areas\\{0}\\Views";**
public override void ExtraParameters(ControllerContext context, IDictionary<string, object> extra)
{
object value;
if (context.RouteData.Values.TryGetValue("area", out value))
extra["area"] = value;
}
public override IEnumerable<string> PotentialLocations(IEnumerable<string> locations, IDictionary<string, object> extra)
{
string areaName;
return TryGetString(extra, "area", out areaName)
**? locations.Select(x => Path.Combine(string.Format(areaPathFormatString,areaName), x)).Concat(locations)**
: locations;
}
}
Spark在路徑中查找約束或默認值鍵「區域」以確定視圖位置。 MVC 2區的支持默認情況下不加這個,你必須聲明你區什麼時候做:
public class AdminRoutes : AreaRegistration
{
public override string AreaName
{
get { return "admin"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Dashboard", action = "Index", id = "", area = "admin" },
new [] { "MyProject.Areas.Admin.Controllers" });
}
}
注意默認設置裏面的area = "admin"
對象。
我看到mVc2在dataToken字典中放置了區域變量。它爲什麼spark找不到它 – Sasha 2009-12-03 11:12:45
在MVC2中將區域移動到DataTokens,這意味着您必須更改此行: context.RouteData.Values.TryGetValue(「area」,out value) to this: context.RouteData.DataTokens。 TryGetValue(「area」,out value) – Sasha 2009-12-03 11:15:58
我正在查看代碼。上面的代碼現在正在爲我工作,運行在asp.net mvc 2測試版(截至今天的最新版本)上。 – midas06 2009-12-03 20:04:26