2011-01-16 15 views
11

मैं पुराने एचटीएमएल को बंद करने की कोशिश कर रहा हूं। इमेज सहायक, मुझे यकीन है कि हर किसी ने एक बिंदु या दूसरे पर उपयोग किया है, और मुझे समस्याएं हैं। निम्नलिखित ठीक संकलित:रेजर और एचटीएमएल हेल्पर्स

@Html.Image("my-id", "~/Content/my-img.png", "Alt Text") 

लेकिन जब मैं एक दृश्य में इस्तेमाल करने की कोशिश यह बस लिखते हैं:

<img alt="Alt Text" id="my-id" src="/content/my-img.png" /> 

और छवि प्रदर्शित नहीं करता है। क्या कोई सहायता कर सकता है?

public static class ImageHelper 
{ 
    public static string Image(this HtmlHelper helper, string id, string url, string alternateText) 
    { 
     return Image(helper, id, url, alternateText, null); 
    } 

    public static string Image(this HtmlHelper helper, string id, string url, string alternateText, object htmlAttributes) 
    { 
     // Instantiate a UrlHelper 
     var urlHelper = new UrlHelper(helper.ViewContext.RequestContext); 

     // Create tag builder 
     var builder = new TagBuilder("img"); 

     // Create valid id 
     builder.GenerateId(id); 

     // Add attributes 
     builder.MergeAttribute("src", urlHelper.Content(url)); 
     builder.MergeAttribute("alt", alternateText); 
     builder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 

     // Render tag 
     var ret = new MvcHtmlString(builder.ToString(TagRenderMode.SelfClosing)); 
     return ret.ToHtmlString(); 
    } 

} 

उत्तर

17

उस्तरा दृश्य इंजन स्वचालित रूप से HTML-भागने तार @ -blocks द्वारा प्रदान की गई देगा:

यहाँ HTML.Image सहायक कोड है कि मैं का उपयोग कर रहा है।
वास्तविक HTML प्रस्तुत करने के लिए, आपको @ -block में IHtmlString कार्यान्वयन लिखने की आवश्यकता है।

string के बजाय HtmlString वापस करने के लिए अपनी विधि बदलें।

+0

बहुत बढ़िया आदमी काम करता है। धन्यवाद। मैं वास्तव में इसकी प्रशंसा करता हूँ। जैसे ही स्टैक ओवरफ्लो मुझे देता है, मैं सही उत्तर की जांच करूंगा ... यह कहता है कि मुझे इंतजार करना है। – jsteve81

1

मैं के रूप में URL की सामग्री विधि के लिए एक कॉल में छवि यूआरएल लपेटकर कोशिश करेगा तो

@Url.Content("~/Content/my-img.png") 

कि पूर्ण के सापेक्ष यूआरएल जब पेज ब्राउज़र

+0

आप समस्या को गलत समझ रहे हैं। – SLaks

+0

हाँ आप सही हैं। यह सिर्फ शाब्दिक तरीके से लिखता था जिस तरह से वह था – Hakeem

3
public static HtmlString Image(this HtmlHelper helper, string id, string url, string alternateText) 
    { 
     return Image(helper, id, url, alternateText, null); 
    } 

    public static HtmlString Image(this HtmlHelper helper, string id, string url, string alternateText, object htmlAttributes) 
    { 
     // Instantiate a UrlHelper 
     var urlHelper = new UrlHelper(helper.ViewContext.RequestContext); 

     // Create tag builder 
     var builder = new TagBuilder("img"); 

     // Create valid id 
     builder.GenerateId(id); 

     // Add attributes 
     builder.MergeAttribute("src", urlHelper.Content(url)); 
     builder.MergeAttribute("alt", alternateText); 
     builder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 

     // Render tag 
     var ret = new MvcHtmlString(builder.ToString(TagRenderMode.SelfClosing)); 

     return ret; 
    } 

को प्लावित है परिवर्तित करना चाहिए बस इस तरह परीक्षण और सही काम करता है। मुझे छवि के नाम को मॉडल धन्यवाद के रूप में जोड़ने के लिए ऐसा कुछ चाहिए।

और यह भी काम करता है।

<img src="@Url.Content("~/Content/Images/Flags/" + c.CountryCode + ".jpg") " alt=""/> 
0

मैं एक ही समस्या थी और मैं इन 2 विस्तार विधि के लिए वापसी प्रकार के रूप में MvcHtmlString का इस्तेमाल किया था और यह

public static class ImageHelper 
{ 
    public static MvcHtmlString Image(this HtmlHelper helper, string id, string url, string alternateText) 
    { 
     return Image(helper, id, url, alternateText, null); 
    } 

    public static MvcHtmlString Image(this HtmlHelper helper, string id, string url, string alternateText, 
           object htmlAttributes) 
    { 
     var builder = new TagBuilder("img"); 

     builder.GenerateId(id); 

     builder.MergeAttribute("alt", alternateText); 
     builder.MergeAttribute("src",url); 

     builder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 

     return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing)); 
    } 
} 
संबंधित मुद्दे