HTMLのテーブルをADO.NETのDataTableに投稿する
2023-10-31 21:27:11
質問
ビューに以下のようなHTMLテーブルがあります。
<table id="tblCurrentYear">
<tr>
<td>Leave Type</td>
<td>Leave Taken</td>
<td>Leave Balance</td>
<td>Leave Total</td>
</tr>
@foreach (var item in Model.LeaveDetailsList)
{
<tr>
<td>@Html.TextBoxFor(m => item.LeaveType, new { width = "100" })</td>
<td>@Html.TextBoxFor(m => item.LeaveTaken, new { width = "100" })</td>
<td>@Html.TextBoxFor(m => item.LeaveBalance, new { width = "100" })</td>
<td>@Html.TextBoxFor(m => item.LeaveTotal, new { width = "100" })</td>
</tr>
}
</table>
htmlテーブルのすべての行を反復処理し、ADO.NET DataTableに値を挿入したいと思います。
簡単に言えば、HTMLテーブルをADO.NET DataTableに変換することです。
HTMLテーブルから値を抽出し、ADO.NET DataTableに挿入するにはどうすればよいですか?
ビューは次のモデルに基づいています。
public class LeaveBalanceViewModel
{
public LeaveBalanceViewModel()
{
this.EmployeeDetail = new EmployeeDetails();
this.LeaveBalanceDetail = new LeaveBalanceDetails();
this.LeaveDetailsList = new List<LeaveBalanceDetails>();
}
public EmployeeDetails EmployeeDetail { get; set; }
public LeaveBalanceDetails LeaveBalanceDetail { get; set; }
public List<LeaveBalanceDetails> LeaveDetailsList { get; set; }
}
どのように解決するのですか?
ポストバック時にモデルにバインドするために
name
属性がモデルのプロパティと一致しなければなりません。フォームコントロールの
foreach
ループを使用すると、正しい名前の属性が生成されません。html を調べてみると、複数の
<input type="text" name="item.LeaveType" .../>
しかし、モデルにバインドするために、コントロールは
<input type="text" name="LeaveDetailsList[0].LeaveType" .../>
<input type="text" name="LeaveDetailsList[1].LeaveType" .../>
などです。このことについて考える最も簡単な方法は、あなたがどのように
LeaveType
のプロパティの値にアクセスする方法を考えることです。
C#
コード
var model = new LeaveBalanceViewModel();
// add some LeaveBalanceDetails instances to the LeaveDetailsList property, then access a value
var leaveType = model.LeaveDetailsList[0].LeaveType;
POSTメソッドにはパラメータ名(例えば
model
のように)、プレフィックス(
model
) を削除すれば、コントロールの name 属性はそのようになるはずです。これを行うには、コントロールの名前属性として
for
ループを使用しなければなりません (コレクションは
IList<T>
)
for(int i = 0; i < Model.LeaveDetailsList.Count; i++)
{
@Html.TextBoxFor(m => m.LeaveDetailsList[i].LeaveType)
....
}
またはカスタム
EditorTemplate
を使うか (コレクションは
IEnumerable<T>
)
で
/Views/Shared/EditorTemplates/LeaveBalanceDetails.cshtml
@model yourAssembly.LeaveBalanceDetails
<tr>
<td>@Html.TextBoxFor(m => m.LeaveType)</td>
....
</tr>
そして、メインビューで(ループ内ではありません)
<table>
.... // add headings (preferably in a thead element
<tbody>
@Html.EditorFor(m => m.LeaveDetailsList)
</tbody>
</table>
で、最後にコントローラで
public ActionResult Edit(LeaveBalanceViewModel model)
{
// iterate over model.LeaveDetailsList and save the items
}
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み] HTTP POST Web リクエストの作成方法
-
[解決済み] DataTableに対するLINQクエリ
-
[解決済み] razor で三項演算子を使用するには (特に HTML 属性について)?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】C#で四捨五入する方法
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である