我是asp mvc的新手,想以某种方式在图像/内容文件夹的视图中定义链接,所以如果图像文件夹发生变化,我不必更改每个链接。
是否可以使用ActionLink和路由,捆绑或有更好的方法来实现这一目标。
我无法在任何地方找到一个好的例子,所以我没有尝试任何编码。
我正在考虑在某处存储固定路径,但这真的是一种mvc类型的解决方案吗?
答案 0 :(得分:2)
有很多方法可以做到这一点。这是扩展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
您现在可以Virtual()
使用Content()
。
这个解决方案可以说是过分的,但它是全面的。