Asp.net-core-razor-edit-form
ASP.NET Core-Razor編集フォーム
この章では、タグヘルパーについて引き続き説明します。 また、アプリケーションに新しい機能を追加し、既存の従業員の詳細を編集できるようにします。 最初に、HomeControllerの編集アクションに移動するリンクを各従業員の側に追加します。
編集アクションはまだありませんが、編集できる従業員IDが必要です。 したがって、まず Views→Home フォルダーを右クリックして、 Add→New Items を選択して、新しいビューを作成します。
中央のペインで、MVCビューページを選択します。 Edit.cshtmlページを呼び出します。 次に、追加ボタンをクリックします。
このページのタイトルについては、編集してから従業員名を指定することができます。
- Edit の前のドル記号は、ランタイムがModel.Nameを従業員名のようなそのプロパティにある値で置き換えることを可能にします。
- フォームタグ内では、asp-actionやasp-controllerなどのタグヘルパーを使用できます。 ユーザーがこのフォームを送信すると、特定のコントローラーアクションに直接移動します。
- この場合、同じコントローラーで編集アクションに移動し、このフォームのメソッドにはHttpPostを使用する必要があることを明示的に伝えます。
- フォームのデフォルトのメソッドはGETであり、GET操作を使用して従業員を編集する必要はありません。
- ラベルタグでは、これがモデルのNameプロパティのラベルであると言うasp-forタグヘルパーを使用しました。 このタグヘルパーは、Html.For属性に正しい値を設定し、このラベルの内部テキストを設定して、従業員名などの必要なものを実際に表示することができます。
HomeControllerクラスに移動して、従業員を編集するフォームをユーザーに提供するビューを返す Edit アクションを追加します。次に、以下に示すように、HttpPostに応答する2番目のEditアクションが必要になります。
まず、GETリクエストに応答する編集アクションが必要です。 従業員IDが必要です。 ここのコードは、Detailsアクションにあるコードに似ています。 最初に、ユーザーが編集する従業員のデータを抽出します。 また、従業員が実際に存在することを確認する必要があります。 存在しない場合、ユーザーをインデックスビューにリダイレクトします。 しかし、従業員が存在する場合、編集ビューをレンダリングします。
また、フォームが送信するHttpPostに応答する必要があります。
次のプログラムに示すように、HomeController.csファイルに新しいクラスを追加しましょう。
HttpPostに応答する編集アクションでは、Edit.cshtmlファイル内のフォームにあるアイテムのみをキャプチャするため、従業員自体ではなく、EmployeeEditViewModelを使用します。
以下は、編集アクションの実装です。
編集フォームは、ルーティングルール( /home/edit/1 など)に従って、URLにIDがあるURLから常に配信される必要があります。
- フォームは常に同じURL/home/edit/1にポストバックします。
- MVCフレームワークは、URLからそのIDを引き出して、パラメーターとして渡すことができます。
- ModelStateが有効かどうかを常に確認する必要があります。また、データベースで更新操作を実行する前に、この従業員がデータベースに存在し、nullでないことを確認する必要があります。
- いずれにも当てはまらない場合は、ビューを返し、ユーザーが再試行できるようにします。 同時ユーザーを使用する実際のアプリケーションでは、従業員がnullである場合、従業員の詳細が誰かによって削除された可能性があります。
- その従業員が存在しない場合は、従業員が存在しないことをユーザーに伝えます。
- そうでない場合は、ModelStateを確認してください。 ModelStateが無効な場合、ビューを返します。 これにより、編集を修正し、ModelStateを有効にすることができます。
- 入力ビューモデルからデータベースから取得した従業員に名前をコピーし、変更を保存します。 SaveChagnes()メソッドは、これらのすべての変更をデータベースにフラッシュします。
以下は、HomeControllerの完全な実装です。
プログラムをコンパイルして、アプリケーションを実行しましょう。
編集リンクが利用可能になりました。 [編集]リンクをクリックして、ジョシュの詳細を編集します。
名前をJosh Grobanに変更しましょう。
[保存]ボタンをクリックします。
上記のスクリーンショットのように、名前がJosh Grobanに変更されていることがわかります。 [ホーム]リンクをクリックします。
ホームページに、更新された名前が表示されます。