本篇 Controller、ViewModel 跟 Day08 範例差不多
依照 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>
@foreach(var item in Model.Items)
{
<p>
<input type="text"
name="Items"
asp-for="@item" />
</p>
}
</div>
<p>
<button type="submit">送出</button>
</p>
</form>
輸入資料 & Submit 後,View Render 出來的結果
<form method="post" action="/Day11/Case01">
<p>
<label for="OrderDate">訂單日期</label>
<input type="date" id="OrderDate" name="OrderDate" value="2021-05-12">
</p>
<div>
<label for="Items">訂單項目</label>
<p>
<input type="text" name="Items" id="item" value="i">
</p>
<p>
<input type="text" name="Items" id="item" value="u">
</p>
<p>
<input type="text" name="Items" id="item" value="y">
</p>
</div>
<p>
<button type="submit">送出</button>
</p>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8JZKsziTm_FAnuczkhH_uBrkpOr7ADzb3TIFWYKLPUY1mp07qSXVSkR2a43i6HYJ2q_fl11RD3xBxb8u7LduvD1cJRlNvJb07jsppyMzE09ZCEtsL0a17vyefALhK89AX6GeMErYps9vqPUNppMCEZc"></form>
使用 Tag Helper
<div>
<label asp-for="Items"></label>
@for (int i = 0; i < Model.Items.Length; i++)
{
<p>
<input type="text"
asp-for="Items[i]" />
</p>
}
</div>
輸入資料 & Submit 後,View Render 出來的結果
<div>
<label for="Items">訂單項目</label>
<p>
<input type="text" id="Items_0_" name="Items[0]" value="4">
</p>
<p>
<input type="text" id="Items_1_" name="Items[1]" value="5">
</p>
<p>
<input type="text" id="Items_2_" name="Items[2]" value="6">
</p>
</div>
再次強調
這個 Case 的缺點就是如果 index 不連續
則 index 不連續之後的資料,都會 Binding 失敗 !
今天的 Case 完美解決 Html Helper 之前提到的二個問題 !
相較於 Html Helper,這邊可以看得出 Tag Helper 更有彈性的地方
針對特定的 html dom 的 asp-for 可以給定二種型態的格式
這篇先到這裡,下一篇來看 複雜型別 object + object collection
!