为img标签创建强类型自定义助手

时间:2013-02-28 10:31:35

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 html-helper

我正在尝试在我的示例MVC项目中创建自定义Html助手。

这是我到目前为止所做的:

public static MvcHtmlString ImageFor<TModel,TValue>(this HtmlHelper<TModel> htmlHelper,
            Expression<Func<TModel,TValue>> expression,
            string alternateText,
            object htmlAttributes) 
        {
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            string name = ExpressionHelper.GetExpressionText(expression);

            TagBuilder tagBuilder = new TagBuilder("img");
            tagBuilder.MergeAttribute("src", metadata.Model.ToString());
            tagBuilder.MergeAttribute("alt", alternateText);
            tagBuilder.MergeAttribute("name", name);

            return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing));
        }

在我的控制器中,我将图像路径传递给属性(imgUrl)。

当我尝试为其创建标记时,它不会在浏览器上显示image,而是始终显示备用文本。

这是它的渲染标记。

<img name="imageUrl" alt="alernate" src="C:\Users\Administrator\Desktop\down.png"/>

虽然我为@Html.Image完成了松散类型的帮助,但它完美无缺!。

我的代码出了什么问题。

我已经搜索了很多创建Strongly Typed Helpers的内容,但没有一个教程解释了当我们访问强类型帮助程序时发生了什么。

我也看过SO中的帖子,当有人发布关于帮助者的代码时,它只是一段代码而没有任何解释。

如果有人有关于创建强类型自定义帮助程序的教程,请提供详细信息请分享链接。

1 个答案:

答案 0 :(得分:1)

您的src属性指向您的本地驱动器。那不行。您的浏览器显示备用文本,因为它找不到图像。您应该使用图像的 URL 。例如src="/images/down.png"