2013-04-09 110 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