ASP MVC设置定义图像文件夹

时间:2014-08-07 06:51:19

标签: asp.net-mvc asp.net-mvc-4

我是asp mvc的新手,想以某种方式在图像/内容文件夹的视图中定义链接,所以如果图像文件夹发生变化,我不必更改每个链接。

是否可以使用ActionLink和路由,捆绑或有更好的方法来实现这一目标。

我无法在任何地方找到一个好的例子,所以我没有尝试任何编码。

我正在考虑在某处存储固定路径,但这真的是一种mvc类型的解决方案吗?

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。这是扩展Url.Content()方法的一种方法。

1。创建扩展方法

我们称之为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());
        }
    }
}

2。将设置添加到主Web.config

自由添加您想要的任何路径。

<add key="path:images" value="~/Content/images" />
<add key="path:scripts" value="~/scripts" />

3。将命名空间添加到views目录的Web.config

<namespaces>
    <add namespace="TestApp.Extensions"/>
</namespaces>

4。使用新方法

@Url.Virtual("{images}/mypic.png")

输出:

/Content/images/mypic.png

您现在可以Virtual()使用Content()

这个解决方案可以说是过分的,但它是全面的。