2

Web ページにレンダリングするデータ テーブルがあります。各行にチェックボックスを表示したい。ただし、表示しようとすると、htmlが表示されます。これを回避する方法はありますか?

クラス定義:

    public int analysisId { get; set; }
    public string heatName { get; set; }
    public DateTime analysisTime { get; set; }
    public string sampleType { get; set; }
    public string grade { get; set; }
    public string productId { get; set; }
    public string element { get; set; }
    public float value { get; set; }

私のモデルのコードは以下のとおりです。

        DataTable GridData = new DataTable();
        GridData.Columns.Add("CheckBoxes");
        GridData.Columns.Add("Analysis ID");
        GridData.Columns.Add("Analysis Time");
        GridData.Columns.Add("Sample Type");
        GridData.Columns.Add("Product ID");

        foreach (var item in elementheaders)
        {
            GridData.Columns.Add(item.Trim());
        }

        int gridend = GridData.Columns.Count;
        int gridrow = 0;//x
        int listrow = 0;//z
        int checknum = 0;

foreach (int analysis in ChemList.Select(d => d.analysisId).Distinct())
{
    DataRow dr = GridData.NewRow();
    GridData.Rows.Add(dr);
    GridData.Rows[gridrow][0] = System.Web.HttpUtility.HtmlDecode("<input type='checkbox' id="+checknum+">");
    GridData.Rows[gridrow][1] = ChemList[listrow].analysisId;
    GridData.Rows[gridrow][2] = ChemList[listrow].analysisTime;
    GridData.Rows[gridrow][3] = ChemList[listrow].sampleType;
    GridData.Rows[gridrow][4] = ChemList[listrow].productId;
}

私からしてみれば:

<div id="grid">
    <table id="example"  class ="gridTable">
        <thead class="gridHead">
            <tr>
                @Html.DisplayFor(x => x.Columns)
            </tr>
        </thead>
        <tbody>
                @Html.DisplayFor(x => x.Rows)
        </tbody>
    </table>
</div>

セルの表示テンプレート:

@model TheManhattanProject.Models.CellValueViewModel

<td>
    @Html.DisplayFor(x => x.Value)
</td>

行の表示テンプレート:

@model TheManhattanProject.Models.RowViewModel

<tr>
    @Html.DisplayFor(x => x.Values)
</tr>

列の表示テンプレート:

@model TheManhattanProject.Models.ColumnViewModel

<th>
    @Html.DisplayFor(x => x.Name)
</th>

これをレンダリングするための 2 つのビュー モデルがあります。セルと行ごとに 1 つ。行は、セル値のリストで構成されます。

4

3 に答える 3

1

デフォルトでは、HTML ヘルパーは文字列を HTML エンコードします。これは、安全およびセキュリティ機能です。これがあなたを助けるかもしれない答えです - エスケープされていないHTML文字列の書き込み/出力

于 2013-04-01T20:00:47.197 に答える
1

html エンコードしない checknum 用のカスタマイズされた表示テンプレートを使用できます。

ViewModel は次を使用します。

GridData.Rows[gridrow][0] = checknum;

表示テンプレートは使用します

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Int>" %>

<input type="checkbox" id="@Model" />
于 2013-04-01T20:31:06.380 に答える
0

答えを導き出しました。これは、マシューが私に伝えようとしていたことの延長です。

@using System;
@model TheManhattanProject.Models.CellValueViewModel
<td>
@{if(Model.Value.StartsWith("<input type='checkbox'"))
{

    @Html.Raw(Model.Value);

}
else
{

    @Html.DisplayFor(x => x.Value);

}
}
</td>
于 2013-04-02T00:14:06.083 に答える