iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

Asp.Net Core 從 Post FormData 走到 輕前端 Vue系列 第 12

Day12 - 套用 Tag Helper - 複雜型別 object + object collection

  • 分享至 

  • xImage
  •  

接下來開始著重使用 Tag Helper 在 Html 長出需要的 Html 控制項 name !

本篇 Controller、ViewModel 跟 Day09 一樣

依照 View 的差異,拆成不同 Case 來看 !


Case01

  • Controller

  • View

    使用 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 項目 !


上一篇
Day11 - 套用 Tag Helper - 複雜型別 object + collection
下一篇
Day13 - 動態 新增/刪除 Collection 項目(一)
系列文
Asp.Net Core 從 Post FormData 走到 輕前端 Vue30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言