私の質問の背景を設定しましょう。私は今、私はSkills
を追加するための別のページを望んでいないHTMLタグヘルパーを使用して、MVCのHTMLテーブルに動的に行を追加します
public class Employee {
public string Name { get; set; }
public List<Skill> Skills { get; set; }
}
public class Skill {
public string Name { get; set; }
public int ExpertLevel { get; set; }
}
以下と同様のモデルでasp.netコアMVCアプリケーションを構築しています。したがって、Employee
のビュー(作成、編集など)では、List<Skill>
をHTMLテーブルとして表現したいと考えています。今すぐテーブルの下に私はAdd Skill
とRemove Skill
に使用するボタンのカップルがあります。私CSHTMLの関連部分は、
<table>
<thead>
<tr>
<th>Skill</th>
<th>ExpertLevel</th>
</tr>
</thead>
<tbody>
<tr>
<td>
C#
<input type="hidden" data-val="true" data-val-required="Skill Name is required" id="item_Name" name="item.Name" value="C#" />
<span class="text-danger field-validation-valid" data-valmsg-for="item.Name" data-valmsg-replace="true" />
</td>
<td>
Yes
<input type="hidden" data-val="true" data-val-number="The field ExpertLevel must be a number." id="item_ExpertLevel" name="item.ExpertLevel" value="4.0" />
<span class="text-danger field-validation-valid" data-valmsg-for="item.ExpertLevel" data-valmsg-replace="true" />
</td>
</tr>
</tbody>
</table>
の下には、今、私はすでに行を追加し、JavaScriptを使用して行を削除する方法を働いてきたように、このかみそりコードをHTMLに変換します
<table>
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Skills.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Skills.ExpertLevel)
</th>
</tr>
</thead>
<tbody>
@if (Model.Skills != null) {
@foreach (var item in Model.Skills) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
<input type="hidden" [email protected] />
<span [email protected] class="text-danger" />
</td>
<td>
@Html.DisplayFor(modelItem => item.ExpertLevel)
<input type="hidden" [email protected] />
<span [email protected] class="text-danger" />
</td>
</tr>}
}
</tbody>
</table>
の下のように見えますただし、私はプレーンで行を構築するためにプレーンhtmlを使用します(以下のようなもの)。
var tdStr = '';
$(rowId).children('td').each(function() {
tdStr += '<td>' + $.trim($(this).children().first().val()) + '</td>';
});
var tr = $('<tr>' + tdStr + '</tr>');
$(tableId + ' > tbody:last-child').append(tr);
私は手動でデータ・ヴァル必要な、クラス=「テキスト-危険フィールド検証-有効」等のタグヘルパーなどの関連するすべての属性を持つタグを作成する必要が好きではない
私のコードの品質を向上させるのに本当に役立ちます。
私の質問は、モデルのDataAnnotations情報(RequiredAttribute.ErrorMessage、DataTypeAttributeなど)をハードコードしたり、タグヘルパーがLinq.Expression
から推測するその他の情報をハードコードすることなく、テーブル行を「ビルド」する方法ですJavaScript
私はtemplate
タグまたは "hidden tr"で遊んでいましたが、あまり進んでいませんでした。
私はasp.net core、mvc、html、およびjavascriptの新機能です。私はこのプロジェクトを使って、これらの技術と適切な習慣を学んでいます。