2012-02-07 55 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