当我提交表单时,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