asp.net核心3 MVC上的模型绑定属性为null

问题描述 投票:0回答:1

有人可以告诉我我做错了什么吗?我正在尝试绑定空属性。

解释:

我的控制器索引看起来不错,因此在我的[[视图中,我可以看到要绑定的所有输入值(IdPedidoAtendimento,PedidoAtendimentoTaxa,HorarioAgendado,IdPedidoTipoPagamento,IdUnidadeUsuario)。

到目前为止,一切看起来都不错。但是,提交页面后,在我的

Controller CheckOut

中,绑定的checkOut对象中的所有属性都为null,如图所示。enter image description here

它运行良好,我不知道自己做了什么,所以现在它获取null属性。我正在使用asp.net core 3.1 MVC

ViewModel

public class CheckOut { public Usuario Usuario { get; set; } public UsuarioUnidade UsuarioUnidade { get; set; } public CatalogoEndereco CatalogoEndereco { get; set; } public UsuarioPagamento UsuarioPagamento { get; set; } public byte IdPedidoAtendimento { get; set; } public string PedidoAtendimentoNome { get; set; } public decimal PedidoAtendimentoTaxa { get; set; } public DateTime? HorarioAgendado { get; set; } public byte IdPedidoTipoPagamento { get; set; } public string PedidoTipoPagamento { get; set; } public int IdUnidadeUsuario { get; set; } public string Nome { get; set; } public string NumEndereco { get; set; } public string ComplementoEndereco { get; set; } public string RuaNome { get; set; } public string CidadeNome { get; set; } public string EstadoNome { get; set; } public string CEP { get; set; } public byte? isCPF { get; set; } public string CPF { get; set; } public string NumeroCartao { get; set; } public string CodCartao { get; set; } }

Controller

public IActionResult Index() { var user = User.FindFirst(ClaimTypes.Name); if (user != null) { Usuario usuario = new Usuario(); usuario = _context.Usuario .SingleOrDefault(u => u.Email.Equals(user.Value) && u.IsAtivo == true); CatalogoEndereco catalogoEndereco = new CatalogoEndereco(); catalogoEndereco = _context.CatalogoEndereco .Where(c => c.IdUsuario.Equals(usuario.IdUsuario) && c.IsAtivo == true && c.IsPrincipal == true) .SingleOrDefault(); UsuarioPagamento usuarioPagamento = new UsuarioPagamento(); usuarioPagamento = _context.UsuarioPagamento .Where(c => c.IdUsuario.Equals(usuario.IdUsuario) && c.IsPrincipal == true) .SingleOrDefault(); UsuarioUnidade usuarioUnidade = new UsuarioUnidade(); usuarioUnidade = _context.UsuarioUnidade .Where(c => c.IdUsuario.Equals(usuario.IdUsuario) && c.IdUnidadeNavigation.IsAtiva == true && c.IsPrincipal == true) .SingleOrDefault(); UsuarioAtendimento usuarioAtendimento = new UsuarioAtendimento(); usuarioAtendimento = _context.UsuarioAtendimento .Where(c => c.IdUsuario.Equals(usuario.IdUsuario) && c.IsPrincipal == true) .SingleOrDefault(); CheckOut checkOut = new CheckOut() { Usuario = usuario, UsuarioUnidade = usuarioUnidade, CatalogoEndereco = catalogoEndereco, UsuarioPagamento = usuarioPagamento, IdPedidoAtendimento = usuarioAtendimento.Tipo, PedidoAtendimentoNome = _context.PedidoAtendimento .FirstOrDefault(t => t.IdPedidoAtendimento == usuarioAtendimento.Tipo).Nome, PedidoAtendimentoTaxa = _context.PedidoAtendimento .FirstOrDefault(t => t.IdPedidoAtendimento == usuarioAtendimento.Tipo).Taxa }; if (usuarioAtendimento.Tipo == 1) { checkOut.Nome = usuario.Nome; if (usuarioUnidade != null) { checkOut.IdUnidadeUsuario = usuarioUnidade.IdUnidade; } if (catalogoEndereco != null) { checkOut.RuaNome = catalogoEndereco.IdEnderecoLogradouroNavigation.IdRuaNavigation.Nome; checkOut.CidadeNome = catalogoEndereco.IdEnderecoLogradouroNavigation.IdCidadeNavigation.Nome; checkOut.EstadoNome = catalogoEndereco.IdEnderecoLogradouroNavigation.IdEstadoNavigation.Nome; checkOut.NumEndereco = catalogoEndereco.NumEndereco; checkOut.ComplementoEndereco = catalogoEndereco.Complemento; checkOut.CEP = catalogoEndereco.IdEnderecoLogradouroNavigation.Cep; } } else if (usuarioAtendimento.Tipo == 2) { if (usuarioUnidade != null) { checkOut.IdUnidadeUsuario = usuarioUnidade.IdUnidade; checkOut.Nome = usuarioUnidade.IdUnidadeNavigation.Nome; checkOut.RuaNome = usuarioUnidade.IdUnidadeNavigation.IdEnderecoLogradouroNavigation.IdRuaNavigation.Nome; checkOut.CidadeNome = usuarioUnidade.IdUnidadeNavigation.IdEnderecoLogradouroNavigation.IdCidadeNavigation.Nome; checkOut.EstadoNome = usuarioUnidade.IdUnidadeNavigation.IdEnderecoLogradouroNavigation.IdEstadoNavigation.Nome; checkOut.NumEndereco = usuarioUnidade.IdUnidadeNavigation.NumEndereco; checkOut.CEP = usuarioUnidade.IdUnidadeNavigation.IdEnderecoLogradouroNavigation.Cep; } } if (usuarioPagamento != null) { checkOut.IdPedidoTipoPagamento = usuarioPagamento.Tipo; checkOut.PedidoTipoPagamento = _context.PedidoTipoPagamento .FirstOrDefault(t => t.IdPedidoTipoPagamento == usuarioPagamento.Tipo).Nome; checkOut.isCPF = 0; checkOut.CPF = usuario.Cpf; checkOut.NumeroCartao = null; checkOut.CodCartao = null; if (usuarioPagamento.Tipo == 1 || usuarioPagamento.Tipo == 2) { checkOut.NumeroCartao = "**** " + usuarioPagamento.Numero.Substring(12, 4); checkOut.CodCartao = null; } } return View(checkOut); } return View(); } [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> CheckOut([Bind("IdPedidoAtendimento,PedidoAtendimentoTaxa,HorarioAgendado,IdPedidoTipoPagamento,IdUnidadeUsuario")] CheckOut checkOut) { if (ModelState.IsValid) { var user = User.FindFirst(ClaimTypes.Name); if (user != null) { var cliente = _context.Usuario.SingleOrDefault(u => u.Email.Equals(user.Value)); var pedido = new Pedido() { IdUsuario = cliente.IdUsuario, IdUnidade = checkOut.IdUnidadeUsuario, IdPedidoCanalVenda = 1, IdPedidoAtendimento = checkOut.IdPedidoAtendimento, IdAtendente = null, IdPedidoTipoPagamento = checkOut.IdPedidoTipoPagamento, IdEntregador = null, IdPedidoStatus = 1, DataPedido = DateTime.Now, DataEntrega = null, HorarioAgendado = null, TaxaServico = checkOut.PedidoAtendimentoTaxa }; _context.Pedido.Add(pedido); await _context.SaveChangesAsync() .ConfigureAwait(false); int lastPedido = pedido.IdPedido; List<Carrinho> cart = JsonSerializeSessionHelper.Get<List<Carrinho>>(HttpContext.Session, "cart"); foreach (var item in cart) { var pedidoItens = new PedidoItens { IdPedido = lastPedido, IdProduto = item.IdProduto, IdProdutoTamanho = item.IdProdutoTamanho, IdProdutoTipoMassa = item.IdProdutoTipoMassa, IdProdutoMeia = item.IdProdutoMeia, Quantidade = item.Quantidade, Preco = item.Preco }; _context.PedidoItens.Add(pedidoItens); } await _context.SaveChangesAsync() .ConfigureAwait(false); TempData["save"] = "Pedido realizado com sucesso"; HttpContext.Session.Remove("cart"); } else { return RedirectToAction("Index", "Login"); } return RedirectToAction("Index", "Pedido"); } return View(checkOut); }

查看

@using (Html.BeginForm("CheckOut", "Carrinho", FormMethod.Post)) { <button type="submit" class="btn btn-info btn-sm"> Pagar (R$ @(@ViewBag.SubTotal + Model.PedidoAtendimentoTaxa)) </button> // I need these values for Bind!! @*@Html.DisplayFor(m => m.IdPedidoAtendimento) @Html.DisplayFor(m => m.PedidoAtendimentoTaxa) @Html.DisplayFor(m => m.HorarioAgendado) @Html.DisplayFor(m => m.IdPedidoTipoPagamento) @Html.DisplayFor(m => m.IdUnidadeUsuario)*@ <input asp-for="IdPedidoAtendimento" value="@Model.IdPedidoAtendimento" id="txtIdPedidoAtendimento" name="txtIdPedidoAtendimento" hidden/> <input asp-for="PedidoAtendimentoTaxa" value="@Model.PedidoAtendimentoTaxa" id="txtPedidoAtendimentoTaxa" name="txtPedidoAtendimentoTaxa" hidden/> <input asp-for="HorarioAgendado" value="@Model.HorarioAgendado" id="txtHorarioAgendado" name="txtHorarioAgendado" hidden /> <input asp-for="IdPedidoTipoPagamento" value="@Model.IdPedidoTipoPagamento" id="txtIdPedidoTipoPagamento" name="txtIdPedidoTipoPagamento" hidden/> <input asp-for="IdUnidadeUsuario" value="@Model.IdUnidadeUsuario" id="txtIdUnidadeUsuario" name="txtIdUnidadeUsuario" hidden/> }
c# asp.net-mvc asp.net-core mvvm model-binding
1个回答
1
投票
Model binding基于name属性发生。您已注释掉@Html.DisplayFor行,因此此处没有约束。对于<input>字段,您已经手动输入了txt<PropertyName>的名称,因此它也没有绑定到这些名称。

ASP.NET仅使用name属性来适应模型绑定即可自动创建适当的asp-for属性。

© www.soinside.com 2019 - 2024. All rights reserved.