如何在C#中将html标记呈现为字符串

时间:2013-02-24 19:48:47

标签: c# asp.net asp.net-mvc string escaping

我正在开发一个用C#开发的项目,而且我对C#的了解并不广泛,我几天前才开始学习:)

我遇到了这个功能:

public static IHtmlString RenderEditData<T>(string linkText) where T : CorinaEntity
{
    string id = new IdGenerator().Generate<T>();

    return new HtmlString(String.Format("<a href=\"#\" data-corina='{{ \"id\" : \"{0}\", \"clrType\" : \"{1}\" }}'>{2}</a>", id, typeof(T).AssemblyQualifiedName, linkText));
}

上面给我一个链接标记,这在我第一次开始处理项目时很好,但现在我只需要将data属性输出作为字符串。所以我试过这个:

public static String RenderEditData<T>() where T : CorinaEntity
{
    string id = new IdGenerator().Generate<T>();


return String.Format("data-corina='{{ id : \'{0}\', 'clrType' : \'{1}\' }}", id, typeof(T).AssemblyQualifiedName);
}

事情是,而不是导致这个:

data-corina="{ "id" : "-[Model.Content]", "clrType" : "Model.Content, Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" }"

它返回如下内容:

data-corina="'{" id="" :="" &#39;-[model.content]&#39;,="" &#39;clrtype&#39;="" &#39;model.content,="" model,="" version="1.0.0.0," culture="neutral," publickeytoken="null'" }=""

显然,有一些字符串转义,我做错了,但我不知道如何做到这一点,而不是弄乱我需要的变量。有人能指出我正确的解决方案吗?如果我将public static IHtmlString RenderEditData更改为public static String RenderEditData,如果我想要的结果只是一个字符串,我也是错了吗?

2 个答案:

答案 0 :(得分:2)

使用Html.Raw帮助程序输出原始HTML。

或者,将字符串包装在HtmlString

public static String RenderEditData<T>() where T : CorinaEntity
{
    string id = new IdGenerator().Generate<T>();

    return new HtmlString(
           string.Format("data-corina='{{ id : \'{0}\', 'clrType' : \'{1}\' }}", 
                                        id, 
                                        typeof(T).AssemblyQualifiedName));
}

答案 1 :(得分:0)

MVC将转义您返回的任何纯字符串。这就是原始函数返回IHtmlString的原因。当您返回HtmlString时,管道知道您肯定希望结果包含原始HTML。