コンテキスト: ASP MVC 3/4、VB.net
複合型のリスト プロパティを持つオブジェクトにバインドしようとしています。
問題文:ポストバック時に、複合型プロパティ以外のすべてのプロパティで値を取得すると、何も返されません。デフォルトのモデルバインダーが複雑なタイプのリストである私のプロパティをバインドできないため、私は何か間違っています。
私は何を間違っていますか?
私のビュー モデル クラス:
Public Class Customer
Public Property ID As Integer
Public Property FirstName As String
Public Property LastName As String
Public Appointments As IList(Of Appointment)
End Class
Public Class Appointment
Public Property ClientName As String
Public Property [Date] As DateTime
Public Property TermsAccepted As Boolean
End Class
コントローラーのアクションメソッドは次のようになります
Function CreateCusotmerWithMultipleBookings() As ActionResult
Dim Modeldata As New Customer With {.ID = 1, .FirstName = "First Name", .LastName = "Last Name"}
Modeldata.Appointments = New List(Of Appointment) From {New Appointment, New Appointment, New Appointment}
Return View(Modeldata)
End Function
<HttpPost()> _
Function CreateCusotmerWithMultipleBookings(FormData As Customer) As ActionResult
Return View(FormData)
End Function
私の見解は次のようになります。
@ModelType Customer
@Using Html.BeginForm
@Html.EditorForModel
If Model.Appointments IsNot Nothing AndAlso Model.Appointments.Count > 0 Then
For i As Integer = 0 To Model.Appointments.Count - 1
@:<b >Appointment @i</b><br />
@Html.TextBoxFor(Function(x) x.Appointments(i).ClientName) @:<br />
@Html.TextBoxFor(Function(x) x.Appointments(i).Date) @:<br />
@Html.TextBoxFor(Function(x) x.Appointments(i).TermsAccepted)@:<br />
Next
End If
End Using
このビューから生成される HTML は次のようなものです: (読みやすくするために不要なマークアップを削除しました)
<body>
<form action="/testarea/Appointment/CreateCusotmerWithMultipleBookings" method="post">
<input id="ID" name="ID" type="number" value="1" />
<input class="text-box single-line" id="FirstName" name="FirstName" type="text" value="First Name" />
<input class="text-box single-line" id="LastName" name="LastName" type="text" value="Last Name" />
<input id="Appointments_0__ClientName" name="Appointments[0].ClientName" type="text" value="" />
<input id="Appointments_0__Date" name="Appointments[0].Date" type="text" value="1/1/0001 12:00:00 AM" />
<input id="Appointments_0__TermsAccepted" name="Appointments[0].TermsAccepted" type="text" value="False" />
<input id="Appointments_1__ClientName" name="Appointments[1].ClientName" type="text" value="" />
<input id="Appointments_1__Date" name="Appointments[1].Date" type="text" value="1/1/0001 12:00:00 AM" />
<input id="Appointments_1__TermsAccepted" name="Appointments[1].TermsAccepted" type="text" value="False" />
<input id="Appointments_2__ClientName" name="Appointments[2].ClientName" type="text" value="" />
<input id="Appointments_2__Date" name="Appointments[2].Date" type="text" value="1/1/0001 12:00:00 AM" />
<input id="Appointments_2__TermsAccepted" name="Appointments[2].TermsAccepted" type="text" value="False" />
<input type="submit" value="Create customer with multiple appointments" />
</form>
もう一度質問し
ます。次のコントローラーの formdata.Appointments に値がないのはなぜですか?
<HttpPost()> _
Function CreateCusotmerWithMultipleBookings(FormData As Customer) As ActionResult
Return View(FormData)
End Function