【问题标题】:Adding CSS class to web grid column item conditionally有条件地将 CSS 类添加到 Web 网格列项
【发布时间】:2012-10-24 13:36:27
【问题描述】:

是否可以有条件地为某个 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")

【问题讨论】:

  • 尝试使用 MvcHtmlString.Create
  • 你的分身得到了最佳答案

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


【解决方案1】:

您必须返回 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);
    }

【讨论】:

  • 所以这确实将字符串转换为 html 格式,但它仍然通过 Webgrid 显示为原始内部文本。从我的网格视图中可以看到,我已经有了一个跨度:格式:@@CheckFeedBack(..)。这会导致问题吗?是否可以在 format 属性中仅包含辅助方法?为了清楚起见,我希望跨度呈现为 html 元素,而不仅仅是编码。
  • 对不起,使用 MvcHtmlString 时不需要编码任何东西,检查代码,我修复了它,所以在视图中只需调用不带跨度的帮助器,应该可以正常工作,并进行测试网格grid.Column(columnName: "FeedBack", format: @CheckFeedBack(item.FeedBack) )
  • 我在尝试使用“格式:”属性中的辅助函数时遇到错误:“当前上下文中不存在名称‘项目’;”我试过@CheckFeedBack(@data.FeedBack, item.FeedBack, item: @item.FeedBack) 等...我的WebGrid数据源被称为“数据”,它来自ViewBag。
猜你喜欢
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多