2013-04-09 108 views
1

在我看来,我循环浏览模型并生成html以显示在页面上。我正在用stringbuilder和if/else条件构建这个html。在MVC 3中渲染StringBuilder HTML查看

我试图呈现这个字符串为html,但我一直陷入困境。

这是代码:

@model UserManager.Models.vw_UserManager_Model 
<div id="success-message"> 
    <fieldset> 
     <legend><b>@ViewData["Action"]</b> </legend> 
     <!-- User created --> 
     <div id="content"> 

      @Html.Raw("some test string"); 

      @{ 
       System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
       int i = 0; 
       sb.Append("<ul>"); 
       foreach (var item in Model) 
       { 
        string s = item.ToString(); 
        if (s == "," && i != 1) 
        { 
         // When it finds first delimiter, start building the string 
         i = 1; 
         sb.Append("<li>"); 
        } 

        else if (s == "," && i == 1) 
        { 
         // When it finds first delimiter, start building the string 
         sb.Append(" : "); 
        } 

        else if (i == 1 && s != "/") 
        { 
         // Contine building the string 
         sb.Append(s); 
        } 

        else if (s == "/") 
        { 
         // End current list item and set i to 0. This will start the next li sequence 
         sb.Append("</li>"); 
         i = 0; 
        } 

        else 
        { 
         // Do nothing in the loop 
        } 
       } 
       sb.Append("</ul>"); 
       var str = MvcHtmlString.Create(sb.ToString()); 

      } 

     </div> 
    </fieldset> 
</div> 

内容SB

{<ul><li>firstname : sdlmsdm</li><li>lastname : smsd</li><li>salutation : Mr</li><li>password : ksklsd</li><li>email : [email protected]</li><li>userName : sdkmsdmke</li><li>MaxConcurrentUsers : 0</li><li>group_name : [PIAS] UK LTD</li><li>module_name : Connect:Top 1000 Advertisers</li><li>isactive : True</li><li>IsApproved : False</li><li>alf : True</li><li>brad : False</li><li>selected_moduleAlf : Connect:Top 1000 Advertisers : System.String : selected_moduleBrad : false : </ul>} 

的,我不能看到HTML一旦该代码调试完毕的东西。有没有人有答案?

+0

你的意思是调试后str是空的? – Sharun 2013-04-09 09:35:55

+0

@slacker str不是空的,因为在断点上我有一个我用循环构建的HTML体。 – 2013-04-09 09:38:54

+0

最后李标签未关闭 – Sharun 2013-04-09 10:00:08

回答

7

这是因为你没有写它。你需要做的@Html.Raw(str)

sb.Append("</ul>"); 
var str = new HtmlString(sb.ToString()); 

@Html.Raw(str) 
+0

我会尝试这个 – 2013-04-09 09:39:19

+0

它没有工作。我不明白为什么我的html没有渲染。我将用新代码编辑我的帖子。 – 2013-04-09 09:46:08

+1

你确定你在'Model'中有很好的价值。看看你的代码,我认为你可以把这个作为一个例子'a,b,c,d',对吧?为什么不从控制器返回“预期的有效字符串”,以便检查“视图代码”是否正常工作。 – 2013-04-09 09:48:40

1

您HtmlString更改为MvcHtmlString.Create(“串”),然后只显示创建的变量。

<div id="content"> 
    @{ 
     System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
     sb.Append("<ul>"); 
     sb.Append("<li>asdfd</li>"); 
     sb.Append("</ul>"); 
     var str = MvcHtmlString.Create(sb.ToString()); 

    } 

    @str 
</div> 
+2

不需要使用MvcHtmlString。您可以使用'Html.Raw'将格式正确的html输出到视图。 – 2013-04-09 09:47:18