前提・実現したいこと
「ユーザーからのフォームでの入力を受け取って、TestsテーブルのTimeカラムに時間を登録したいのですが、入力時は「時」と「分」の二箇所を入力してもらい、DB登録時に結合させたい」
詳細は以下の通りです。
1.Modelファイルで
「Public Property Time As Integer」と定義
2.Viewファイルの表示ではTextBoxForを2つ用意(時間用と分用の入力ボックス)し、
ユーザーに「時」と「分」を二桁ずつ入力してもらう。
3.ControllerではCreateアクションで入力値をDBに挿入したいが、ユーザーが入力した値を結合した後、
DBへ挿入したい。
※例えば、Viewで「10」時「30」分と入力された場合(テキストボックスでは、10と30がそれぞれ入力されている)、結合して「1030」をDBに挿入
発生している問題・エラーメッセージ
上記の実装を考えるにあたって、特に、下記の二点についてとっかかりがなく困っております。
①Modelで定義した1つのPropertyに対して、どのようにしてViewで2つのテキストボックスに分けるのか。
②下記「該当のソースコード」の「TestsController.vb」において、Viewでのテキストボックスの値を結合する記述を書くのはどの箇所で、どのように書けば良いのか。
①についてですが、
「@TextBoxFor(Function(model) model.Time, New With {.htmlAttributes = New With {.class = "form-control"}})」
のようなTextBoxForメソッドを2つ用意することを考えておりますが、
「Funcrion(model) model.Time」の箇所はもちろん分割できないと思われますので、この箇所の書き方は検討が全くついておりません。
②についてですが、
各々のテキストボックスに対して、Javascriptでテキストボックスの中身を取得、結合したら良いのかなとは考えています。
ただ、その結合結果を、このCreateアクションにどうやって組み込ませれば良いのかがわかりません。)
該当のソースコード
※以下はTestsController.vbのファイルです。
※今回の質問に必要だと思われる箇所以外は一部省略し、データ挿入時のCreateアクションのみを書いております。
VisualBasic
1 2<HttpPost()> 3<ValidateAntiForgeryToken()> 4Function Create(<Bind(Include:="Id,Time")> ByVal test As Test) As ActionResult 5 If ModelState.IsValid Then 6 db.Tests.Add(test) 7 db.SaveChanges() 8 Return RedirectToAction("Index") 9 End If 10 Return View(test) 11End Function
※以下はTest.vbのファイルです。
VisualBasic
1 2 3Imports System.ComponentModel.DataAnnotations 4Imports System.ComponentModel 5 6Public Class Test 7 8 <Key()> 9 <DisplayName("ID")> 10 Public Property Id As String 11 12 <DisplayName("時間")> 13 Public Property Time As Integer 14 15End Class
※以下はCreate.vbhtmlのファイルです。(コメント欄参考用)
VisualBasic
1@ModelType MvcApp.Test 2 3@Using (Html.BeginForm()) 4 @*「時間」用TextBox*@ 5 <div class="form-group"> 6 @Html.LabelFor(Function(model) model.Time, htmlAttributes:=New With {.class = "control-label col-md-2"}) 7 <div class="col-md-10"> 8 @Html.TextBoxFor(Function(model) model.Time, New With {.htmlAttributes = New With {.class = "form-control"}}) 9 </div> 10 </div> 11 12 @*「分」用TextBox*@ 13 <div class="form-group"> 14 @Html.LabelFor(Function(model) model.Time, htmlAttributes:=New With {.class = "control-label col-md-2"}) 15 <div class="col-md-10"> 16 @Html.TextBoxFor(Function(model) model.Time, New With {.htmlAttributes = New With {.class = "form-control"}}) 17 </div> 18 </div> 19End Using
補足情報(FW/ツールのバージョンなど)
統合開発環境
Visual Studio2019
(言語:VB.NET、プロジェクトテンプレート:ASP.NET Webアプリケーション MVC)
使用PC
Windows10
※平日は仕事のため、返信が19:30以降になります。
※休日の返信は不定期です。
申し訳ございませんが、どうぞよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー