我是asp mvc的新手,想要以一种不需要更改每个链接的方式在视图中定义到图像/内容文件夹的链接。
是否可以使用ActionLink和路由、捆绑或者有更好的方法来实现这一点。
我无法在任何地方找到一个好的例子,所以我没有尝试任何编码。
我在考虑将一个固定路径存储在某个地方,但这真的是mvc类型的解决方案吗?
我是asp mvc的新手,想要以一种不需要更改每个链接的方式在视图中定义到图像/内容文件夹的链接。
是否可以使用ActionLink和路由、捆绑或者有更好的方法来实现这一点。
我无法在任何地方找到一个好的例子,所以我没有尝试任何编码。
我在考虑将一个固定路径存储在某个地方,但这真的是mvc类型的解决方案吗?
有许多方法可以做到这一点。以下是一种扩展Url.Content()
方法的方法。
我们将其称为Virtual()
。
namespace TestApp.Extensions
{
public static class UrlHelperExtensions
{
private const string _settingPattern = "path:{0}";
private const string _regexPattern = @"\{\w+\}";
public static string Virtual(this UrlHelper helper, string url)
{
Regex r = new Regex(_regexPattern);
var matches = r.Matches(url);
if (matches.Count == 0) return url;
var sb = new StringBuilder(url);
var keys = WebConfigurationManager.AppSettings.AllKeys;
foreach (var match in matches)
{
string key = match.ToString().TrimStart('{').TrimEnd('}');
string pattern = string.Format(_settingPattern, key);
foreach (var k in keys)
{
if (k == pattern)
{
sb.Replace(match.ToString(), WebConfigurationManager.AppSettings.Get(k));
}
}
}
return helper.Content(sb.ToString());
}
}
}
可以自由地添加任何路径。
<add key="path:images" value="~/Content/images" />
<add key="path:scripts" value="~/scripts" />
<namespaces>
<add namespace="TestApp.Extensions"/>
</namespaces>
@Url.Virtual("{images}/mypic.png")
输出:
/Content/images/mypic.png
现在您可以在需要使用Content()
的地方使用Virtual()
。
这个解决方案可能有些过度,但它十分全面。
.png、.jpg
等)- 抱歉,我有点困惑,因为MVC文件夹结构有Content和Images文件夹。 - user3559349