C# asp.net core 3 MVC上的模型绑定属性为空
谁能告诉我我做错了什么?我正在尝试绑定null属性 解释: 我的控制器索引看起来正常,因此在我的视图中,我可以看到我要绑定的所有输入值(IDPEDIDOATENDIMOTO、PEDIDOATENDIMOTAXA、HorarioAgendado、IdPedidoTipoPagamento、IDUNIDADEEUSUARIO) 到目前为止,一切看起来都很好。但是,在提交页面之后,在我的控制器CheckOut中,CheckOut对象bind中的所有属性都为null,如图所示 它工作得很好,我不知道我做了什么,所以它现在得到了空属性。 我正在使用asp.net core 3.1 MVC 视图模型C# asp.net core 3 MVC上的模型绑定属性为空,c#,asp.net-mvc,asp.net-core,mvvm,model-binding,C#,Asp.net Mvc,Asp.net Core,Mvvm,Model Binding,谁能告诉我我做错了什么?我正在尝试绑定null属性 解释: 我的控制器索引看起来正常,因此在我的视图中,我可以看到我要绑定的所有输入值(IDPEDIDOATENDIMOTO、PEDIDOATENDIMOTAXA、HorarioAgendado、IdPedidoTipoPagamento、IDUNIDADEEUSUARIO) 到目前为止,一切看起来都很好。但是,在提交页面之后,在我的控制器CheckOut中,CheckOut对象bind中的所有属性都为null,如图所示 它工作得很好,我不知道我
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; }
}
控制器
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);
}
public IActionResult Index()
{
var user=user.FindFirst(ClaimTypes.Name);
如果(用户!=null)
{
Usuario Usuario=新的Usuario();
usuario=\u context.usuario
.SingleOrDefault(u=>u.Email.Equals(user.Value)和&u.IsAtivo==true);
CatalogEnderEco CatalogEnderEco=新CatalogEnderEco();
catalogoEndereco=\u context.catalogoEndereco
其中(c=>c.IdUsuario.Equals(usuario.IdUsuario)和&c.IsAtivo==true和&c.IsPrincipal==true)
.SingleOrDefault();
UsuarioPagamento UsuarioPagamento=新的UsuarioPagamento();
usuarioPagamento=_context.usuarioPagamento
其中(c=>c.IdUsuario.Equals(usuario.IdUsuario)和&c.IsPrincipal==true)
.SingleOrDefault();
UsuarioUnidade UsuarioUnidade=新的UsuarioUnidade();
usuarioUnidade=\u context.usuarioUnidade
其中(c=>c.IdUsuario.Equals(usuario.IdUsuario)和&c.IdUnidadeNavigation.IsAtiva==true和&c.IsPrincipal==true)
.SingleOrDefault();
USUARIATENDIMENTO USUARIATENDIMENTO=新的USUARIATENDIMENTO();
USUARIATENDIMENTO=\u context.USUARIATENDIMENTO
其中(c=>c.IdUsuario.Equals(usuario.IdUsuario)和&c.IsPrincipal==true)
.SingleOrDefault();
签出=新签出()
{
乌萨里奥=乌萨里奥,
UsuarioUnidade=UsuarioUnidade,
CatalogoEndereco=CatalogoEndereco,
Usariopagamento=Usariopagamento,
IdPedidoAtendimento=通常情况下的指示,
PEDIDOATendmentoName=\u context.PEDIDOATendmento
.FirstOrDefault(t=>t.IdPedidoAtendimento==usuariaatendicato.Tipo).Nome,
PedidoAtendimentoTaxa=\u context.PedidoAtendimento
.FirstOrDefault(t=>t.IdPedidoAtendimento==usuariaatenditiono.Tipo)。分类群
};
如果(通常情况下,指示o.Tipo==1)
{
checkOut.Nome=usuario.Nome;
如果(通常为Unidade!=null)
{
checkOut.IdUnidadeUsuario=usuarioUnidade.IdUnidade;
}
如果(catalogoEndereco!=null)
{
checkOut.RuaNome=catalogoEndereco.ideenderecologradouronavigation.idruaviation.Nome;
checkOut.cidenome=catalogoEndereco.ideenderecologradouronavigation.idcidedenavigation.Nome;
checkOut.EstadoNome=catalogoEndereco.ideenderecologradouronavigation.idestatonavigation.Nome;
checkOut.NumEndereco=catalogoEndereco.NumEndereco;
checkOut.ComplementoEndereco=catalogoEndereco.Complemento;
checkOut.CEP=catalogoEndereco.ideenderecologradouronavigation.CEP;
}
}
否则如果(通常情况下,指示o.Tipo==2)
{
如果(通常为Unidade!=null)
{
checkOut.IdUnidadeUsuario=usuarioUnidade.IdUnidade;
checkOut.Nome=usuarioUnidade.IdUnidadeNavigation.Nome;
checkOut.RuaNome=usuarioUnidade.IdUnidadeNavigation.IdEnderecoLogradouroNavigation.idruavigation.Nome;
checkOut.cidenome=usuarioUnidade.IdUnidadeNavigation.IdEnderecoLogradouroNavigation.IdCidadeNavigation.Nome;
checkOut.EstadoNome=usuarioUnidade.IdUnidadeNavigation.IdEnderecoLogradouroNavigation.IdEstadoNavigation.Nome;
checkOut.NumEndereco=usuarioUnidade.IdUnidadeNavigation.NumEndereco;
checkOut.CEP=usuarioUnidade.IdUnidadeNavigation.IdEnderecoLogradouroNavigation.CEP;
}
}
如果(通常为空)
{
checkOut.idpedidotipogamento=usuarioPagamento.Tipo;
checkOut.PedidoTipoPagamento=\u context.PedidoTipoPagamento
.FirstOrDefault(t=>t.idpedidotipogamento==usuarioPagamento.Tipo).Nome;
checkOut.isCPF=0;
checkOut.CPF=usuario.CPF;
checkOut.NumeroCartao=null;
checkOut.CodCartao=null;
如果(Usariopagamento.Tipo==1 | | Usariopagamento.Tipo==2)
{
checkOut.numeriocatao=“**”+usuarioPagamento.numerio.Substring(12,4);
checkOut.CodCartao=null;
}
}
返回视图(签出);
}
返回视图();
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务签出([Bind(“IDPEDIDOATendmento,PEDIDOATendmentotaxa,HorarioAgendado,IdPedidoTipoPagamento,IdUnidadeUsuario”)]签出签出)
{
if(ModelState.IsValid)
{
var user=user.FindFirst(ClaimTypes.Name);
如果(用户!=null)
{
var cliente=_context.Usuario.SingleOrDefault(u=>u.Email.Equals(user.Value));
var pedido=新的pedido()
{
伊杜萨里奥=
@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/>
}