2012-02-07 54 views
3

我有一个MVC应用程序。在我完成网站之后,我需要更改@url.content的行为。如何覆盖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> 
+0

user1167823 - 我可以问一个忙吗?对于变更的要求究竟是什么,因为这会给你带来更多的答案? (例如,你需要添加参数到@ url.content,你需要把它作为一个字符串,将其添加到响应流)等等。 – 2012-02-07 15:29:44

+0

@jim我需要检查这个为我的图像,如果该值存在,则默认行为将会创建新图像。 – MHF 2012-02-07 15:48:00

+0

mhf - 因此,忘记关于图像内容的'逻辑',你是说如果图像'x'不存在,图像'y'必须被创建并显示?如果是这样,我觉得你最好创建一个新的Html.Image()覆盖我感觉。这个覆盖当然会包含图像的绝对路径或相对路径。我认为你对Url.Content()的选择在这方面是愚蠢的。下面是我的这个例子。 – 2012-02-07 16:15:54

回答

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项目一个“电梯”,带有注释加给的提示,你可能会做什么。我还没有以任何方式测试这个,所以要注意空虚:)

好运

+0

谢谢。它工作 – MHF 2012-02-12 10:36:02

+0

MHF - 很高兴帮助你。请记住将问题标记为在其他人正在寻找类似解决方案的情况下应答。所有最好的直到下一次... – 2012-02-12 17:40:15

4

我觉得这里你最好的选择是只是为了创造另一个UrlHelper扩展方法。

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

所以我需要改变我的所有网页。我的网站非常大 – MHF 2012-02-07 15:32:36

+0

@ user1167823我不知道任何其他方式来改变你正在寻找的行为。 – 2012-02-07 15:38:47

+1

@MHF你可以做全球搜索和替换。 – 2012-02-07 16:12:26