C# asp.net core 3 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,如图所示 它工作得很好,我不知道我

谁能告诉我我做错了什么?我正在尝试绑定null属性

解释:

我的控制器索引看起来正常,因此在我的视图中,我可以看到我要绑定的所有输入值(IDPEDIDOATENDIMOTO、PEDIDOATENDIMOTAXA、HorarioAgendado、IdPedidoTipoPagamento、IDUNIDADEEUSUARIO)

到目前为止,一切看起来都很好。但是,在提交页面之后,在我的控制器CheckOut中,CheckOut对象bind中的所有属性都为null,如图所示

它工作得很好,我不知道我做了什么,所以它现在得到了空属性。 我正在使用asp.net core 3.1 MVC

视图模型

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/>
  }