2

条件付きで CSS クラスを設定したり、特定の Web グリッド列の文字列を html にエンコードしたりすることはできますか? 列で format: を使用して項目にスパン タグを追加できましたが、今度は、かみそりビューのヘルパー関数またはコントローラー/モデルからのブール式に基づいて、スパン タグにクラスを追加する必要があります。私はこれを 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;
    }

フィードバックが完了すると条件付きで機能するプレゼンテーションは次のとおりです。

フィードバック欄

更新: MvcHtmlString を返すという Zach からのガイダンスの後、WebGrid 列で上記のヘルパー メソッドを使用できない問題が発生しました。以下に正しい構文を示します。

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

1 に答える 1

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