剃刀和HTML助手 [英] Razor and HTML Helpers

查看:78
本文介绍了剃刀和HTML助手的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想端口旧HTML.Image帮手,我敢肯定,每个人都用在一个点或另一个,我有问题。下面编译罚款:

  @ Html.Image(我的-ID,〜/内容/我-img.png,ALT文本)

但是,当我尝试在一个视图中使用它,它简单地写道:

 < IMG ALT =替换文本ID =我-IDSRC =/内容/我-img.png/>

和不显示图像。任何人都可以帮助?

这里的HTML.Image帮手code,我使用:

 公共静态类ImageHelper
{
    公共静态字符串映像(此的HtmlHelper帮手,字符串ID,URL字符串,字符串还有AlternateText)
    {
        返回图像(辅助,ID,网址,还有AlternateText,NULL);
    }    公共静态字符串映像(此的HtmlHelper帮手,字符串ID,URL字符串,字符串还有AlternateText,对象htmlAttributes)
    {
        //实例化一个UrlHelper
        VAR urlHelper =新UrlHelper(helper.ViewContext.RequestContext);        //创建标签制造商
        VAR建设者=新TagBuilder(IMG);        //创建有效身份证件
        builder.GenerateId(ID);        //添加属性
        builder.MergeAttribute(src用户,urlHelper.Content(URL));
        builder.MergeAttribute(ALT,还有AlternateText);
        builder.MergeAttributes(新RouteValueDictionary(htmlAttributes));        //渲染标签
        VAR RET =新Mv​​cHtmlString(builder.ToString(TagRenderMode.SelfClosing));
        返回ret.ToHtmlString();
    }}


解决方案

剃刀视图引擎将 @ -blocks自动呈现HTML转义的字符串。结果
要渲染实际的HTML,你需要写在 IHtmlString 实施 @ - 块。

更改方法返回 HtmlString 而不是字符串

I'm trying to port the old HTML.Image helper, that I'm sure everyone has used at one point or another, and I'm having issues. The following compiles fine:

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

But when I try to use it in a view it simply writes:

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

And doesn't display the image. Can anyone assist?

Here's the HTML.Image helper code that I'm using:

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

}

解决方案

The Razor view engine will automatically HTML-escape strings rendered by @-blocks.
To render actual HTML, you need to write an IHtmlString implementation in the @-block.

Change your method to return HtmlString instead of string.

这篇关于剃刀和HTML助手的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆