我正在使用带有SparkViewEngine 1.1的ASP.NET MVC 2,我收到错误消息 非静态字段,方法或属性需要对象引用'Spark.Web.Mvc.SparkView .Url.get' 当我在Application.spark视图文件中使用以下代码时
<global baseImagePath='Url.Content(Context,"~/Content/_images")' type="string" />
我想要完成的是基本上将基本图像路径定义为可在页面模板中引用的全局变量。
例如,在使用主Application.spark的Home / Index.spark中,我在视图中有以下代码片段
<a href="..."><img src="${baseImagePath}" alt="..." /></a>
作为一种解决方法,当我通过执行<global baseImagePath='"~/Content/_images"' type="string" />
设置baseImagePath时,我可以设置一个硬编码值,但我希望能够事先解决“〜”。
有什么建议吗?
谢谢!
修改 我根据Rob的建议在这里添加我的解决方案
在 Shared / _global.spark 中,我添加了<use namespace="System.Web" />
,以便我可以访问System.Web命名空间。
在 Shared / Application.spark 中,我添加了
<global baseImagePath='VirtualPathUtility.ToAbsolute("~/Content/_images")' type="string" />
答案 0 :(得分:3)
这里的问题是Url.Content(...
正在从SparkView实例访问System.Web.Mvc
中的UrlHelper类。问题是当为全局变量解析Application.spark
时,您还没有视图实例,因为在实例化生成的视图类之前定义了全局变量。因此,无法从视图中访问Url
等实例变量。
从它的外观来看,你只是试图从一个相对的路径获得绝对路径。为此,您可能只使用System.Web
中的静态VirtualPathUtility类。
像ToAbsolute(...)
这样的方法有很多让生活更轻松的方法。或者,如果您有当前上下文,则可以从HttpContext.Current.Server.MapPath(...)
方法获取它。
希望有所帮助,
一切顺利,
Rob G