接下來開始著重使用 Tag Helper 在 Html 長出需要的 Html 控制項 name !
本篇 Controller、ViewModel 跟 Day09 一樣
依照 View 的差異,拆成不同 Case 來看 !
使用 Tag Helper
<form asp-action="Case01"
method="post">
<p>
<label asp-for="OrderDate"></label>
<input type="date"
asp-for="OrderDate" />
</p>
<div>
<label asp-for="Items"></label>
<table>
<thead>
<tr>
<th>
<label asp-for="Items.FirstOrDefault().Name"></label>
</th>
<th>
<label asp-for="Items.FirstOrDefault().Quantity"></label>
</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Items?.Length; i++)
{
<tr>
<td>
<input type="text"
asp-for="Items[i].Name" />
</td>
<td>
<input type="number"
step=1
min=0
asp-for="Items[i].Quantity" />
</td>
</tr>
}
</tbody>
</table>
</div>
<p>
<button type="submit">送出</button>
</p>
</form>
輸入資料 & Submit 後,View Render 出來的結果
<form action="/Day12/Case01" method="post"> <p>
<label for="OrderDate">訂單日期</label>
<input type="date" id="OrderDate" name="OrderDate" value="2021-05-07">
</p>
<div>
<label for="Items">訂單項目</label>
<table>
<thead>
<tr>
<th>
<label for="Name">名稱</label>
</th>
<th>
<label for="Quantity">數量</label>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input type="text" id="Items_0__Name" name="Items[0].Name" value="b">
</td>
<td>
<input type="number" step="1" min="0" id="Items_0__Quantity" name="Items[0].Quantity" value="2">
</td>
</tr>
<tr>
<td>
<input type="text" id="Items_1__Name" name="Items[1].Name" value="c">
</td>
<td>
<input type="number" step="1" min="0" id="Items_1__Quantity" name="Items[1].Quantity" value="3">
</td>
</tr>
<tr>
<td>
<input type="text" id="Items_2__Name" name="Items[2].Name" value="d">
</td>
<td>
<input type="number" step="1" min="0" id="Items_2__Quantity" name="Items[2].Quantity" value="4">
</td>
</tr>
</tbody>
</table>
</div>
<p>
<button type="submit">送出</button>
</p>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8BeKebzmhD5Pmy2bGJRwhhKT8Kxj5cFT9TMWMe5MLg3hAZMQvqb7T2MN-fAXNlKuqMrFrAWmPJnMmBiBuDA9petFx_TTn_bQXytOG0TKwkg7CnhC44o112SHqQAJN7wsSXixA8jVjplVbvD6iEschHM">
</form>
再次強調
這個 Case 的缺點就是如果 index 不連續
則 index 不連續之後的資料,都會 Binding 失敗 !
到這邊先做個簡單的整理:
當套用 Html Helper / Tag Helper,注意 Render 後的 Html 控制項 name,只要符合規則,在 Submit Form 後,後端進行 Model Binding 時,就不會有太大的問題 !
這篇先到這裡,下一篇來看 動態 新增/刪除 Collection 項目
!