如何在MVC中覆盖@ url.content?

时间:2012-02-07 15:24:49

标签: c# asp.net-mvc asp.net-mvc-3

我有一个MVC应用程序。完成网站后,我需要更改@url.content行为。

所以我需要在我的所有网站应用程序中覆盖@url.content。我该怎么做?

<script src="@Url.Content("~/Scripts/jquery-1.7.1.js")"></script>
<script src="@Url.Content("~/Scripts/ui/jquery.ui.core.js")"></script>
<script src="@Url.Content("~/Scripts/ui/jquery.ui.widget.js")"></script>
<script src="@Url.Content("~/Scripts/ui/jquery.ui.tabs.js")"></script>
<script src="@Url.Content("~/Scripts/ui/jquery.ui.accordion.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.nivo.slider.js")"></script>
<script src="@Url.Content("~/Scripts/jwplayer.js")"></script>

2 个答案:

答案 0 :(得分:4)

我认为你最好的选择就是创建另一个UrlHelper扩展方法。

public static class MyExtensions
{
    public static string ContentExt(this UrlHelper urlHelper, string Content)
    {
        // your logic
    }
}

答案 1 :(得分:3)

MHF,

正如我在上面的评论中提到的,我觉得你应该创建一个定制的html.image()帮助器,而不是试图覆盖url.content()帮助器,因为你的问题与图像有关,而不是url.content()本身。这是我如何处理这个问题:

public static partial class HtmlHelperExtensions
{
    public static MvcHtmlString Image(this HtmlHelper helper,
                                string url,
                                object htmlAttributes)
    {
        return Image(helper, url, null, htmlAttributes);
    }
    public static MvcHtmlString Image(this HtmlHelper helper,
                                    string url,
                                    string altText,
                                    object htmlAttributes)
    {
        TagBuilder builder = new TagBuilder("image");

        var path = url.Split('?');
        string pathExtra = "";

        // NB - you'd make your test for the existence of the image here
        // and create it if it didn't exist, then return the path to 
        // the newly created image - for better or for worse!! :)

        if (path.Length > 1)
        {
            pathExtra = "?" + path[1];
        }
        builder.Attributes.Add("src", VirtualPathUtility.ToAbsolute(path[0]) + pathExtra);
        builder.Attributes.Add("alt", altText);
        builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));
    }
}   

用途:

@Html.Image("~/content/images/ajax-error.gif", new{@class="error_new"})

现在,上述内容纯粹是来自旧的mvc项目的“升力”,并添加了一条评论,以暗示您可能会做什么。我没有以任何方式对此进行测试,因此请注意:)

祝你好运