2012-10-24 31 views
2

是否可以有條件地爲某個Web網格列設置CSS類或將字符串編碼爲html?我能夠使用格式將span標籤添加到項目中:在列中,但現在我需要根據剃鬚刀視圖中的幫助函數或控制器/模型中的bool表達式向span標籤中添加一個類。 我不想用JS做到這一點,C#應該足夠有條件地向web網格列項添加CSS類

以下是我在視圖模型的嘗試:

@grid.GetHtml(
headerStyle:"reviewGridHeader", 
    columns: grid.Columns(
    ...[other columns]... 
    grid.Column(columnName: "FeedBack", format: @<span>@CheckFeedBack(item.FeedBack)</span>) 
)) 

助手功能視圖模型(拆分和比較字符串):

static string CheckFeedBack(string item) { 
     String[] feedbacks = System.Text.RegularExpressions.Regex.Split(item, "of"); 

     //if feedback complete 
     if((Convert.ToInt32(feedbacks[0]) == (Convert.ToInt32(feedbacks[1])))) 
     { 
      string newFeedback = @"<span class=""feedBackComplete"">"+ item +"</span>"; 
      string encodedFeedback = System.Web.HttpUtility.HtmlEncode(newFeedback); 

      return encodedFeedback; 
     } 
     return item; 
    } 

這裏是演示文稿,其中有條件的工程時,反饋完成:

feedback column

更新:經過Zach的指導,返回一個MvcHtmlString,我有一些問題可以在WebGrid列中使用上面的這個輔助方法。下面給出了正確的語法:

grid.Column(columnName: "FeedBack", format: (item) => CheckFeedBack(item.FeedBack), style: "webGridAlignment") 
+0

嘗試使用MvcHtmlString.Create – maxs87

+1

誰是扎克? ;) –

+0

你的doppelganger得到了最好的答案 –

回答

2

您必須返回HTML不是字符串......對於情況下,你可以使用MvcHtmlString,只是生在視圖

static System.Web.Mvc.MvcHtmlString CheckFeedBack(string item) { 
     String[] feedbacks = System.Text.RegularExpressions.Regex.Split(item, "of"); 

     //if feedback complete 
     if((Convert.ToInt32(feedbacks[0]) == (Convert.ToInt32(feedbacks[1])))) 
     { 
      string newFeedback = @"<span class=""feedBackComplete"">"+ item +"</span>"; 

      return MvcHtmlString.Create(newFeedback); 
     } 
     return MvcHtmlString.Create(item); 
    } 
+0

所以這確實將字符串轉換爲html格式,但它仍然通過Webgrid顯示爲原始內部文本。正如你可以從我的網格視圖看到的,我已經有了一個跨度:格式:@ @CheckFeedBack(..)。這是否會導致問題?是否有可能在格式屬性中只有幫助器方法? 爲了清楚起見,我希望跨度呈現爲html元素,而不是僅僅編碼。 –

+0

對不起,使用MvcHtmlString時,你不需要編碼任何東西,檢查代碼,我修正它,所以在視圖中調用沒有跨度的幫助器,應該可以正常工作,並且測試它不在網格 'grid中。列(columnName:「FeedBack」,格式:@CheckFeedBack(item.FeedBack))' –

+0

嘗試在「format:」屬性中使用幫助器函數時出現錯誤:「名稱'項'不存在在目前的情況下;「我試過@CheckFeedBack(@ data.FeedBack,item.FeedBack,item:@ item.FeedBack)等等...我的WebGrid數據源被稱爲「數據」,它來自ViewBag。 –