質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1037閲覧

1つのプロパティに対して、Viewでは複数の入力項目に分けて入力してもらい、DBへ挿入する際に結合したい

Eltk

総合スコア51

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/06/01 14:00

編集2020/06/02 13:58

前提・実現したいこと

「ユーザーからのフォームでの入力を受け取って、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以降になります。
※休日の返信は不定期です。
申し訳ございませんが、どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/01 14:37

読みにくいので書き直してください。自分で書いた結果を自分で見てみましたか? それで読む気がしますか? 読んでもらわないと話が始まらないのですから、読んでもらえる努力をしましょうよ。
gentaro

2020/06/01 22:10

なんでコード以外の箇所を```で括ってしまうんだろう。 markdownは義務教育レベルなのでちゃんと勉強したほうが良いですよ。
Eltk

2020/06/01 22:44

>SurferOnWww様 失礼いたしました。 先程修正いたしましたので、再確認のほどよろしくお願いします。 >gentaro様 マークダウン記法のことを理解できておらず、申し訳ございませんでした。勉強します。 ただ、今、出勤途中ですので、帰宅後に修正させていただきます。
退会済みユーザー

退会済みユーザー

2020/06/02 00:40

> 先程修正いたしましたので、再確認のほどよろしくお願いします。 直ってません。質問の内容以前に見かけの問題を言ってます。 Teratail の質問入力フォームにある ``` と ``` の間に文章を入れたのだと思いますが、そこはコードだけにしましょう。投稿し終わってからでも結果を見れば、文章まで ``` と ``` の間に入れるのは間違っていると気づくと思うのですが・・・
Eltk

2020/06/02 12:59

>SurferOnWww様 遅くなりすみません。 コードと、補足説明文を分けて書き直しました。 いただいた回答に関しましても、少し考えたく思いますので、少々お待ちいただければと思います。
退会済みユーザー

退会済みユーザー

2020/06/02 13:12

> コードと、補足説明文を分けて書き直しました。 そこじゃないです。「発生している問題・エラーメッセージ」のところです。自分の質問をながめてみたらわかると思うのですが、何で分からないのだろう・・・
Eltk

2020/06/02 13:39

>SurferOnWww様 理解力が乏しく何度もすみません。 自身の不明点二点を先に結論として記述し、後で詳細について書くように修正しました。 想定されているものと違うようでしたら、ご指摘お願いいたします。
退会済みユーザー

退会済みユーザー

2020/06/02 13:48

何でここまで言っても分からないのか分からない。別の回答欄に書いておくので見てください。
Eltk

2020/06/02 14:09

>SurferOnWww様 確認しました。ありがとうございました。 ※いただいた回答の方に返信させていただいております。
guest

回答2

0

下の画像の赤枠のところがダメと言っているのです。

イメージ説明

囲うと以下のようになるところが、

上記の実装を考えるにあたって、特に、下記の二点についてとっかかりがなく困っております。 ①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アクションにどうやって組み込ませれば良いのかがわかりません。)

囲わなければ以下のようになるということです。

上記の実装を考えるにあたって、特に、下記の二点についてとっかかりがなく困っております。

①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アクションにどうやって組み込ませれば良いのかがわかりません。)

投稿2020/06/02 13:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eltk

2020/06/02 14:00

>SurferOnWww様 やっと理解できました。 マークダウン記法の件は、「該当のソースコード」の件で修正完了したと勘違いしておりました。 丁寧に説明してくださり、ありがとうございました。
guest

0

ベストアンサー

上記の実装を考えるにあたって、特に、下記の内容についてとっかかりがなく困っております。

①Modelで定義した1つのPropertyに対して、どのようにしてViewで2つのテキストボックスに分けるのか。

メソッドは Create(DB に新規レコードを INSERT)なのですよね?

であれば、「Viewで2つのテキストボックスに分ける」のではなくて、最初から「時」と「分」を入力する 2 つのテキストボックスを設けておけば済むはずです。

Edit の場合は、DB から取得してくる「時分」が Integer 型の 1030 というようになっているなら、View ではなくて Controller で 10 と 30 に分け、View にはやはり 2 つのテキストボックスを設けてそれぞれに表示するようにしてください。

②下記「該当のソースコード」の「TestsController.vb」において、Viewでのテキストボックスの値を結合する記述を書くのはどの箇所で、どのように書けば良いのか。

例えば、Controller の当該アクションメソッドに「時」と「分」を受ける String 型の引数を持たせて、一旦それにブラウザから送信されてきたデータを受けて、結合してから Inetger 型にパースし、DB に INSERT 操作を行えば問題解決のはずです。

ユーザー入力の検証のため Model にデータアノテーション属性を付与したプロパティを使いたいという場合は、別にそれ専用のクラスを定義してそれをアクションメソッドの引数に設定し、モデルバインディングされてから、質問で言う Test クラスに詰め替えれば望むことができるはずです。

投稿2020/06/02 01:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eltk

2020/06/02 13:32

>SurferOnWww様 >メソッドは Create(DB に新規レコードを INSERT)なのですよね? →はい。おっしゃる通りです。 >であれば、「Viewで2つのテキストボックスに分ける」のではなくて、最初から「時」と「分」を入力する 2 つのテキストボックスを設けておけば済むはずです。 →確認なのですが、「該当のソースコード」Create.vbhtmlにテキストボックスを2つ用意しました。このようなコードでよろしいでしょうか。「Function(model) model.Time」が二箇所存在する点が、合っているのか不安です。 >例えば、Controller の当該アクションメソッドに「時」と「分」を受ける String 型の引数を持たせて、一旦それにブラウザから送信されてきたデータを受けて →確認ですが、引数の受け取り方は、下記のような書き方でおっしゃられている内容として合っておりますでしょうか。 Function Create(<Bind(Include:="Id,Time")> ByVal test As Test, ByVal hour As String, ByVal minute As String) As ActionResult
退会済みユーザー

退会済みユーザー

2020/06/03 01:24 編集

> →確認なのですが 実際に自分で確認して期待通りにいかなかったから聞いているのだと理解していますが、であれば、自分で確認した結果がどうなったのか、期待したことと何が違ったのかを書いてください。 次回からは必ずそのようにしてください。もし自分で確認してないとすると論外ですが・・・ > 「Function(model) model.Time」が二箇所存在する点 TextBoxFor ではなくて TextBox を使ってください。 TextBox が html の input 要素に変換されたとき、その name 属性がアクションメソッドのパラメータ名 hour, minute と同じになるように、TextBox の引数を設定してください。 > Function Create(<Bind(Include:="Id,Time")> ByVal test As Test, ByVal hour As String, ByVal minute As String) As ActionResult 引数に Test は不要です。 質問の本筋とは離れますが、ユーザー入力の検証は必須です。どこかに必ず実装するようにしましょう。あと、時刻に Integer を使うのも考え直すべきでしょう。
Eltk

2020/06/03 12:23

>SurferOnWww様 ご回答ありがとうございます。 はい。次回からは気をつけます。失礼いたしました。 もう一度、試してみます。 検証の件等の件もアドバイスありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問