在MVC2视图中,我根本无法使用标签。它们显示为破碎的图片。标签(由我写的Html.ImageFor()扩展方法创建)是一个完全有效的标记,例如我从IE中的页面源复制的标记:
<img alt="Picture Display" src="~/Content/Pictures/IMGP0164 (resized).JPG" />
请注意,如果我不使用帮助器方法,只使用正确的src URL键入标记,那么最终也会破坏。如果我改为使用标签,使用相同的src URL,那就可以正常工作,图片会按预期显示。
因此,出于某种原因,正义标签根本不适用于MVC2视图。我是MVC2的新手,但不是ASP.NET或Html的新手。当在MVC2视图中使用时,是否有关于标签的内容,我还没有发现它?
提前感谢您的线索!
答案 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));
}
}
}