<img/>标记在MVC2应用程序中失败

时间:2010-08-18 20:21:22

标签: asp.net-mvc-2 image

在MVC2视图中,我根本无法使用标签。它们显示为破碎的图片。标签(由我写的Html.ImageFor()扩展方法创建)是一个完全有效的标记,例如我从IE中的页面源复制的标记:

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

请注意,如果我不使用帮助器方法,只使用正确的src URL键入标记,那么最终也会破坏。如果我改为使用标签,使用相同的src URL,那就可以正常工作,图片会按预期显示。

因此,出于某种原因,正义标签根本不适用于MVC2视图。我是MVC2的新手,但不是ASP.NET或Html的新手。当在MVC2视图中使用时,是否有关于标签的内容,我还没有发现它?

提前感谢您的线索!

2 个答案:

答案 0 :(得分:3)

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

波浪号必须替换为站点的虚拟路径。为此,您使用Url.Content。由于你没有显示破损方法的来源,我无法修复它,但是在普通标记中你会写:

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

您可以在帮助程序中使用相同的想法。

答案 1 :(得分:0)

这是请求的帮助方法:

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));  
        }      
    }
}