ASP. NET MVC: модель в строго типизированном виде не заполняется - PullRequest
0 голосов
/ 14 февраля 2020

Я совершенно незнаком с ASP. NET MVC, и я прорабатываю учебник, чтобы получить основы. Учебник находится в C#, и я преобразую его в VB, чтобы соответствовать некоторым связанным проектам. Я должен предположить, что я что-то упускаю в этом преобразовании, но не могу понять, что это может быть.

У меня есть следующий класс:

Public Class GuestResponse
    Public Name As String
    Public Email As String
    Public Phone As String
    Public WillAttend As Boolean?
End Class

и строго типизированный представление, относящееся к этому классу:

@ModelType PartyInvites.GuestResponse

@Code
    Layout = Nothing
End Code

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>RsvpForm</title>
</head>
<body>
    @Using Html.BeginForm
        @<p>Your name: @Html.TextBoxFor(Of String)(Function(x) x.Name)</p>
        @<p>Your email: @Html.TextBoxFor(Of String)(Function(x) x.Email)</p>
        @<p>Your phone: @Html.TextBoxFor(Of String)(Function(x) x.Phone)</p>
        @<p>
            Will you attend?
            @Html.DropDownListFor(Of Boolean?)(Function(x) x.WillAttend,
                                                        New SelectListItem() {New SelectListItem With {.Text = "Yes, I'll be there", .Value = Boolean.TrueString},
                                                        New SelectListItem With {.Text = "No, I can't come", .Value = Boolean.FalseString}}, "Choose an option")
        </p>
        @<input type="submit" value="Submit RSVP" />
    End Using
</body>
</html>

Мой контроллер имеет простой метод действия, который принимает этот класс и отвечает другим представлением:

<HttpPost>
Function RsvpForm(g As GuestResponse) As ViewResult
    'TODO: Email response to the party organizer
    Return View("Thanks", g)
End Function

К сожалению, данные формы из запроса на публикацию не заполняется в моем классе GuestResponse. Если я вставлю точку останова в этот метод действия, все свойства GuestResponse будут пусты. В то же время значения Request.Form выглядят как и ожидалось - они просто не заполняют объект GuestResponse.

Я уверен, что это что-то маленькое, что мне не хватает. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Я понял это. По-видимому, ASP. NET будет заполнять только свойства объекта - мой объект имел только публичные c поля.

Так вот:

Public Class GuestResponse
    Public Name As String
    Public Email As String
    Public Phone As String
    Public WillAttend As Boolean?
End Class

должно быть:

Public Class GuestResponse
    Public Property Name As String
    Public Property Email As String
    Public Property Phone As String
    Public Property WillAttend As Boolean?
End Class

Спасибо тем, кто участвовал.

0 голосов
/ 14 февраля 2020

Попробуйте добавить атрибут <FromForm> к параметру g.

...