ASP.Net MVC模型绑定错误 - 不填充模型属性

时间:2015-01-04 00:08:34

标签: asp.net-mvc model-binding

当我提交表单时,Controller中的模型正在接收模型不完整。我的模型有12个属性,但只有2个属性值(ID和Campeonato)。所有其他属性都带有零/空值。

奇怪的是,当我使用(Form As FormCollection)代替(JModel作为JogoModel)时,表单正确填充,但JModel永远不会工作!

我有这个型号:

 Public Class JogoModel

    <Key>
    Public Property ID As Integer

    <Required> <StringLength(255, minimumlength:=5)>
    Public Property Campeonato As String
    <Required> <DataType(DataType.Date)>
    Public Data As Date
    <Required> <DataType(DataType.Time)>
    Public Hora As Date

    <Required> <StringLength(255, minimumlength:=5)>
    Public TimeCasa As String
    <Required> <StringLength(255, minimumlength:=5)>
    Public TimeFora As String

    <Required> <Range(1, 99)>
    Public Casa As Double
    <Required> <Range(1, 99)>
    Public Empate As Double
    <Required> <Range(1, 99)>
    Public Fora As Double
    <Required> <Range(1, 99)>
    Public GolEMeio As Double
    <Required> <Range(1, 99)>
    Public Dupla As Double
    <Required> <Range(1, 99)>
    Public Ambas As Double

这个观点:

@option strict on
@option explicit on

@modeltype bets.Models.JogoModel

@Code

    ViewData("Title") = "Editar"

    Dim props = New With {.type = "number", .maxlength = "5", .Min = "0", .max = "99.99", .step = "0.1"}

End Code

@Using Html.BeginForm("Editar", "Jogos")

    @Html.Hidden("ID", If(Model IsNot Nothing, Model.ID, Nothing))


@<table>
    <tr> <td colspan="4">Campeonato </td> </tr>
    <tr> <td colspan="4">@Html.TextBox("Campeonato", Model.Campeonato, New With {.Width = "250"})</td></tr>
    <tr><td colspan="2">Data:</td><td>Hora:</td></tr>
    <tr><td colspan="2">@Html.TextBox("Data", Model.Data.ToString("yyyy-MM-dd"), New With {.type = "date"})</td><td>@Html.TextBox("Hora", Model.Hora.ToString("HH:mm"), New With {.type = "time"})</td></tr>
    <tr><td colspan="3">Time da casa:</td><td colspan="3">Time fora:</td></tr>
    <tr><td colspan="3">@Html.TextBox("TimeCasa", Model.TimeCasa , New With {.Width = "250"})</td><td colspan="3">@Html.TextBox("TimeFora", Model.TimeFora, New With {.Width = "250"})</td></tr>
    <tr><td>Casa:</td><td>Empate:</td><td>Fora:</td><td>G.M.:</td><td>Dupla:</td><td>Ambas:</td></tr>
    <tr>
        <td>@Html.TextBox("Casa",FN( Model.Casa), props)</td>
        <td>@Html.TextBox("Empate", FN(Model.Empate), props)</td>
        <td>@Html.TextBox("Fora", FN( Model.Fora), props)</td>
        <td>@Html.TextBox("GolEMeio", FN(Model.GolEMeio), props)</td>
        <td>@Html.TextBox("Dupla", FN(Model.Dupla), props)</td>
        <td>@Html.TextBox("Ambas", FN(Model.Ambas), props)</td>
    </tr>
    <tr><td colspan="4"><input type="submit" value="Salvar"/></td></tr>
</table>
End Using

<div id="cap">@ViewData("result")</div>

我在JogoController上有这个动作:

 <AcceptVerbs(HttpVerbs.Post)>
    Function Editar(JModel As JogoModel) As ActionResult

        With JModel

            If Not ModelState.IsValid Then
                Return View(JModel)
            End If

            Try

                If .ID = 0 Then
                    Dim j As Jogo = Jogo.Cadastrar(CurrentLogin, .TimeCasa, .TimeFora, .Campeonato, .Data, .Casa, .Empate, .Fora, .GolEMeio, .Dupla, .Ambas)
                Else

                    Dim j As Jogo = Jogo.FromDB(.ID)

                    j.Campeonato = .Campeonato
                    j.TimeCasa = .TimeCasa
                    j.TimeFora = .TimeFora
                    j.Data = .Data
                    j.Casa = .Casa
                    j.Empate = .Empate
                    j.Fora = .Fora
                    j.Golemeio = .GolEMeio
                    j.Dupla = .Dupla
                    j.Ambas = .Ambas

                    j.GravarAlteracoes()

                End If

                ViewData("result") = "Dados salvos com sucesso!"

            Catch ex As Exception
                ViewData("result") = "Erro: " & ex.Message
            End Try

            Return View(JModel)

        End With

    End Function

0 个答案:

没有答案
相关问题