こんにちは、私は MVC を初めて使用し、これらの投稿を多数調べましたが、問題を解決できませんでした。
dropdownlistfor html ヘルパーを使用してドロップダウン リストを正常に作成しましたが、フォームを送信すると、選択したアイテムの値がモデルとともにアクションの結果に渡されません。つまり、値をデバッグして調べると、ドロップダウンリストのプロパティは何もありません。これが「ModelState.isValid」もfalseを返す原因になっていると思います。
ここに私のモデルがあります:
Public Class Warranty
Public Property state As DropDownList
Private _States As IEnumerable(Of State)
Public Property States As IEnumerable(Of State)
Get
If _States Is Nothing Then
_States = GetStates()
End If
Return _States
End Get
Set(value As IEnumerable(Of State))
_States = value
End Set
End Property
Public Shared Function GetStates() As List(Of State)
Dim l As New List(Of State)
l.Add(New State With {.Value = "none", .Text = "Selected One"})
l.Add(New State With {.Value = "UT", .Text = "Utah"})
l.Add(New State With {.Value = "NV", .Text = "Nevada"})
Return l
End Function
End Class
ここに私の状態クラスがあります:
Public Class State
Public Property Value As String
Public Property Text As String
End Class
これが私のコントローラーメソッドです:
' GET: /Warranty
Function WarrantyRegistration() As ActionResult
ViewData("Message") = "Warranty Registration Form"
Dim _statesList As New SoleWebSite.Models.Warranty
Return View(_statesList)
End Function
'
'POST: /Warranty
<HttpPost()> _
Function WarrantyRegistration(ByVal warranty As SoleWebSite.Models.Warranty) As ActionResult
If ModelState.IsValid Then
war.state = warranty.state.SelectedItem.Value.ToString()
// warranty.state
db.AddTowarranty_registrations(war)
db.SaveChanges()
db.Dispose()
Return RedirectToAction("WarrantyRegistration")
End If
Return View(warranty)
End Function
これが私の見解です:
<td>@Html.DropDownListFor(Function(m) m.state, New SelectList(Model.States, "Value", "Text"))</td>
何が間違っているのかわかりません。
すべてを強く型付けしたままにして、可能であればビューバッグやビューデータの使用を避けたいと思います。
任意の提案をいただければ幸いです。
前もって感謝します。