2

是否可以为某个 Web 网格列有条件地设置 CSS 类或将字符串编码为 html?我能够使用格式将跨度标签附加到项目:在列中,但现在我需要基于剃刀视图中的辅助函数或控制器/模型中的布尔表达式向跨度标签添加一个类。我不想用 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;
    }

这是演示文稿,它在反馈完成时有条件地起作用:

反馈栏

更新:在 Zach 提供返回 MvcHtmlString 的指导后,我在 WebGrid 列中使用上述辅助方法时遇到了一些问题。下面显示了正确的语法:

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

1 回答 1

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);
    }
于 2012-10-24T14:25:45.613 回答