2013-02-24 57 views
0

我的工作是用C#开发的一个项目,我的C#知识不丰富的,我刚开始学前几天:)如何渲染HTML标记为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 RenderEditDatapublic static String RenderEditData,如果我想要的结果只是一个字符串,我也做错了吗?

回答

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

我仍然得到一个奇怪的结果,并没有像我第一次得到它时,它是一个标签 – Roland 2013-02-24 20:12:22

+0

我不知道什么“奇怪的结果”的意思,@罗兰德 – Oded 2013-02-24 20:13:10

+0

有一些地方引号是不应该是,但我只是想,我错过了整个对象周围的包装报价:''data-corina ='{{\“id \”:\“{0} \”,\“clrType \”:\“{1 } \“}}'”':) – Roland 2013-02-24 20:17:12

0

MVC将难逃你返回任何普通字符串。这就是为什么你的原始函数返回IHtmlString。当您返回HtmlString时,管道知道您确实希望结果包含原始HTML。