2010-08-18 33 views
1

在MVC2視圖中,我無法讓標籤工作。他們顯示爲破碎的圖片。標籤(由我寫一個Html.ImageFor()擴展方法創建的)是一個完全有效的標籤,例如這一點,這是我從IE中的頁源複製:<img>標籤在MVC2應用程序中失敗

<img alt="Picture Display" src="~/Content/Pictures/IMGP0164 (resized).JPG" /> 

注意,如果我不不要使用助手方法,只需輸入一個標籤,並帶有一個正確的src URL,最終也會被破壞。如果我使用標籤,而使用相同的src網址,那可以正常工作,並且圖片按預期顯示。

因此,出於某種原因,正義的標籤根本不適合我從MVC2視圖。我對MVC2非常陌生,但對ASP.NET或Html並不陌生。有沒有關於標籤的東西,在MVC2視圖中使用時,我只是還沒有發現?

在此先感謝您的線索!

+0

如果這條消息說的「標籤」,這意味着我意識到現在我應該把它們寫成<img>,但我沒有意識到它們會被剝離。 – 2010-08-18 20:23:33

+0

選擇文字。按下編輯器上方的「代碼」按鈕(0和1)。您的尖括號將被保留。 – 2010-08-18 20:27:29

+0

你可以發佈你的自定義擴展的代碼嗎? – Fabian 2010-08-18 20:29:04

回答

3

您的Html.ImageFor()已損壞,因爲src="~/Content/Pictures/IMGP0164 (resized).JPG"不是有效的URI。

代字號必須替換爲網站的虛擬路徑。爲此,請使用Url.Content。既然你還沒有表現出對你的破法源,我不能修復它,但在普通的標記,你可以這樣寫:

<img alt="Picture Display" src="<%= Url.Content("~/Content/Pictures/IMGP0164 (resized).JPG")" /> 

你可以用你的助手裏面同樣的想法。

+0

這聽起來像是一個很好的解決方案,但我一直無法使它在輔助方法中工作。我還沒有找到任何方法讓Url名稱空間在那裏可用,而微軟的「幫助」在這種情況下不是很有幫助。不過謝謝! – 2010-08-18 21:27:16

+0

終於搞定了!感謝您給我的線索,我修改了控制器,將路徑放入以../../開頭的模型中,並且不需要更改任何其他內容。再次感謝! – 2010-08-18 21:46:42

0

這裏的要求helper方法:「圖像標籤」

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Linq.Expressions; 
using System.Web; 
using System.Web.Mvc; 
using PictureThis.Models; 


namespace System.Web.Mvc.Html 
{ 
    public static class ExtensionMethods 
    { 
     // HtmlHelper Extensions 

     /// <summary> 
     /// Builds an Html image element. 
     /// </summary> 
     /// <param name="helper">Required target param</param> 
     /// <param name="src">Source URL attribute</param> 
     /// <param name="alt">Alt text attribute</param> 
     /// <returns></returns> 
     public static MvcHtmlString ImageFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string alt) 
     { 
      TagBuilder tb = new TagBuilder("img"); 
      Delegate GetSource = expression.Compile(); 
      string source = GetSource.DynamicInvoke(html.ViewData.Model).ToString(); 
      tb.Attributes.Add("src", source); 
      tb.Attributes.Add("alt", alt); 
      return MvcHtmlString.Create(tb.ToString(TagRenderMode.SelfClosing)); 
     }  
    } 
} 
相關問題