表題通り、ASP.NET MVC5(利用言語:VB.NET)の環境下においてパラメータの送信が上手く行かずに困っています。
私自身、最近になってMVC5の基礎を学習し始めたばかりのため基本的な部分の見落とし等ありましたらご容赦下さい。
目的はView上に複数の入力欄を設け、ユーザーが内容を入力して送信ボタンを押すことで
View上にある入力項目の内容全てを1つのModelオブジェクトに格納してControllerに渡したいと考えています。
まず試験的に、以下の3つを作成して実行してみました。
0. 2つのテキスト入力欄を持つView
- Viewのテキスト入力欄で入力された2つの値を格納するModel
- Viewから入力された値をModelオブジェクトで受け取り、値が格納されているかをチェックし
値が入っていれば「OK」、Nothingであった場合は「NG」をViewの入力欄に出力するController
▼1.View
HTML
1@ModelType TestProject.FuncModel 2@Code 3 'ページタイトル設定 4 ViewBag.Title = "モデルバインディングによる複数パラメータ送信テスト" 5 '共通レイアウト 6 Layout = "~/Views/Shared/_Layout.vbhtml" 7End Code 8 9@Using Html.BeginForm() 10 11 @Html.EditorFor(Function(model) model.param1) 12 @Html.EditorFor(Function(model) model.param2) 13 14 @<input type="button" value="SUBMIT実行" onclick="document.forms[0].action = '/Func2/Post';document.forms[0].submit()"/> 15 16End Using
▼2.Model
VB.NET
1Public Class FuncModel 2 Public param1 As String 3 Public param2 As String 4End Class
▼3.Controller
VB.NET
1Imports System.Web.Mvc 2 3Namespace Controllers 4 Public Class FuncController 5 Inherits Controller 6 7 ' 初期表示 8 Function Index() As ActionResult 9 Dim viewModel As FuncModel = New FuncModel() 10 11 Return View("FuncView", viewModel) 12 End Function 13 14 Function post() As ViewResult 15 Return View() 16 End Function 17 18 'Viewの「SUBMIT実行」ボタン押下時に実行されるFunction 19 <HttpPost()> 20 Function Post(model As FuncModel) As ActionResult 21 'Viewに渡す値を纏めて格納するModel 22 Dim viewModel As FuncModel = New FuncModel() 23 24 If ModelState.IsValid Then 25 26 If model.param1 Is Nothing Then 27 viewModel.param1 = "param1取得NG" 28 End If 29 30 If model.param2 Is Nothing Then 31 viewModel.param2 = "param2取得NG" 32 End If 33 34 End If 35 36 '遷移先View名と引き渡す値を格納したModelオブジェクトを指定 37 Return View("FuncView", viewModel) 38 End Function 39 End Class 40End Namespace
これらを作成して実行し、View上のテキスト入力欄に適当な文字列を入力して「SUBMIT実行」のボタンを押下したところ
2つの入力欄にはそれぞれ「param1取得NG」「param2取得NG」の文言が表示されました。
View→Controllerは値が渡っていませんが、Controller→Viewは値が渡っているため
モデルバインディングが完全に動作していない訳では無いようです。
そして、下記のようにFunctionの引数に直接param1・param2を追加するとNGにならず
デバッグ実行で確認するとparam1・param2共に画面で入力した値が格納されていることが確認できました。
VB.NET
1 'Viewの「SUBMIT実行」ボタン押下時に実行されるFunction 2 <HttpPost()> 3 Function Post(model As FuncModel, param1 As String, param2 As String) As ActionResult 4 'Viewに渡す値を纏めて格納するModel 5 Dim viewModel As FuncModel = New FuncModel() 6 7 If ModelState.IsValid Then 8 9 If param1 Is Nothing Then 10 viewModel.param1 = "param1取得NG" 11 End If 12 13 If param2 Is Nothing Then 14 viewModel.param2 = "param2取得NG" 15 End If 16 17 End If 18 19 '遷移先View名と引き渡す値を格納したModelオブジェクトを指定 20 Return View("FuncView", viewModel) 21 End Function
この事から、モデルバインディング自体は機能しているもののView→Controllerに値を渡す際に
値格納用のModelに入力値が格納されていない、という現象が起きていることが確認できます。
しかし、何故Modelに値が格納されないのか原因が分からずに停滞している状態です。
ご存知の方がいらっしゃいましたら、どうか原因についてご教示いただけないでしょうか。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー