2

コンテキスト: 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
4

0 に答える 0