2011-01-06 33 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