ASP MVC设置定义图像文件夹

3

我是asp mvc的新手,想要以一种不需要更改每个链接的方式在视图中定义到图像/内容文件夹的链接。

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

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

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


@StephenMuecke 重命名文件夹或选择另一个文件夹。 - mko
@StephenMuecke...请查看更新的答案。 - Kartikeya Khosla
图片/内容文件夹包含什么 - .css文件还是图像文件(.png、.jpg等)- 抱歉,我有点困惑,因为MVC文件夹结构有Content和Images文件夹。 - user3559349
@mko,请查看已更新的答案。 - Kartikeya Khosla
@StephenMuecke...请查看更新的答案..谢谢.. - Kartikeya Khosla
显示剩余3条评论
1个回答

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. 将命名空间添加到视图目录下的 Web.config 文件中

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

4. 使用新方法

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

输出:

/Content/images/mypic.png

现在您可以在需要使用Content()的地方使用Virtual()

这个解决方案可能有些过度,但它十分全面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接