有条件地将CSS类添加到Web网格列项

时间:2012-10-24 13:36:27

标签: c# asp.net-mvc asp.net-mvc-3 razor encoding

是否可以有条件地为某个Web网格列设置CSS类或将字符串编码为html?我能够使用格式在项目中将span标签附加到项目中,但现在我需要根据razor视图中的辅助函数或控制器/模型中的bool表达式向span标记添加一个类。 我不想用JS做这个,C#就足够了

以下是我在视图模型中尝试的内容:

 @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")

1 个答案:

答案 0 :(得分:2)

您必须返回html而不是字符串...对于这种情况,您可以使用MvcHtmlString并在视图中使用raw

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