2011-01-06 32 views
2

我正在使用ASP.NET MVC 2和SparkViewEngine 1.1,並且我收到錯誤消息對象引用對於非靜態字段,方法或財產「Spark.Web.Mvc.SparkView.Url.get」當我用下面的代碼Application.spark視圖文件SparkViewEngine:在全局變量中使用Url.Content在Application.Spark中

<global baseImagePath='Url.Content(Context,"~/Content/_images")' type="string" /> 

我試圖完成基本上是定義一個基礎映像路徑一個可以在頁面模板中引用的全局變量。

例如,在主頁/ Index.spark,它使用主Application.spark,我將有以下代碼片段在視圖

<a href="..."><img src="${baseImagePath}" alt="..." /></a> 

作爲一種變通方法,我可以設置一個硬編碼值,當我設置baseImagePath做<global baseImagePath='"~/Content/_images"' type="string" />,但我也希望能夠解決「〜」之前。

有什麼建議嗎?

謝謝!

編輯 我在這裏每羅布的建議

共享/ _global.spark加入我的解決方案,我添加<use namespace="System.Web" />讓我有機會獲得System.Web命名空間。

共享/ Application.spark,我添加

<global baseImagePath='VirtualPathUtility.ToAbsolute("~/Content/_images")' type="string" /> 

回答

3

這裏的問題是,Url.Content(...從SparkView實例訪問在System.Web.Mvc的UrlHelper類。問題是當爲全局變量解析Application.spark時,您還沒有視圖的實例,因爲全局變量是在生成的視圖類實例化之前定義的。因此從視圖中訪問和實例變量如Url是不可能的。

從它的外觀來看,你只是試圖從相對的一個獲得絕對路徑。爲此,您可能只需使用System.Web中的靜態VirtualPathUtility類。

那裏有一些方法,如ToAbsolute(...),使生活更輕鬆。或者,如果您有當前上下文,則可以從HttpContext.Current.Server.MapPath(...)方法中獲取它。

希望幫助,
一切順利,
羅布摹

+0

謝謝!使用VirtualPathUtility.ToAbsolute方法做到了。 – Abe 2011-01-06 19:11:39