值不能为空。 ASP 中的参数名称 DropdownList。网络核心

Value cannot be null. Parameter name DropdownList in ASP. NET CORE

我的mi代码有问题,显示错误信息时出现标题信息

这是我的表单注册码

     <div class="form-group col-md-6">
                                                @if (!Model.MODEL_PACIENTE.PAC_ID.Equals(0))
                                                {
                                                    <label>Comuna:</label>
                                                    @Html.DropDownList("MODEL_PACIENTE.PAC_COMUNA", new SelectList(Model.MODEL_PACIENTE.Comuna_Lista, "Text", "Text"),
                                 new { @class = "form-control" })
                                                }
                                                else
                                                {
                                                    <label>Comuna:</label>
                                                    @Html.DropDownList("MODEL_PACIENTE.PAC_COMUNA", new SelectList(Model.MODEL_PACIENTE.Comuna_Lista, "Text", "Text"),
"ESCOGA UNA COMUNA", new { @class = "form-control" }) // HERE IS THE ERROR WHEN MY DNI IS REGISTER IN THE BD                          }
                                                <span asp-validation-for="MODEL_PACIENTE.PAC_COMUNA" class="text-danger"></span>
                                            </div>

我的 class GetOdontologo

代码
 public List<SelectListItem> GetOdontologo(ApplicationDbContext context)
    {
        List<SelectListItem> selectListItems = null;
        try
        {
            selectListItems = new List<SelectListItem>();
            context.TBL_ODONTOLOGO.ToList().ForEach(item =>
            {
                selectListItems.Add(new SelectListItem
                {
                    Value = item.ODONT_ID.ToString(),
                   // Text = item.ODONT_CODIGO

                    Text = item.ODONT_CODIGO + '-' + item.ODONT_APELLIDO + ' ' + item.ODONT_NOMBRE
                });
            });
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: '{ex}'");
        }
        return selectListItems;

    }

这是 class GetComuna

  public List<SelectListItem> GetComuna(ApplicationDbContext context)
    {
        List<SelectListItem> selectListItems = null;
        try
        {
            selectListItems = new List<SelectListItem>();
            context.TBL_PROVINCIA.ToList().ForEach(item =>
            {
                selectListItems.Add(new SelectListItem
                {
                    Value = item.PROV_ID.ToString(),
                    Text = item.PROV_NOMBRE
                });
            });
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: '{ex}'");
        }
        return selectListItems;

    }

这是我的方法“onget”的代码

public void OnGet(int idActPac)
    {
        _DataPac2 = null;
        if(idActPac.Equals(0))
        {
            _DataPac2 = null;
        }
        if (_dataInput != null || _DataPac1 != null || _DataPac2 != null)
        {
            if (_dataInput != null)
            {
                MODEL_PACIENTE = _dataInput;
                MODEL_PACIENTE.AvatarImage = null;
            }
            else
            {
                if (_DataPac1 != null || _DataPac2 != null)
                {
                    if (_DataPac2 != null)
                    
                        _DataPac1 = _DataPac2;
                        MODEL_PACIENTE = new PACIENTE
                        {
                            PAC_ID = _DataPac1.PAC_ID,
                            PAC_NOMBRE = _DataPac1.PAC_NOMBRE,
                            PAC_APELLIDO = _DataPac1.PAC_APELLIDO,
                            PAC_CODIGO = _DataPac1.PAC_CODIGO,
                            PAC_EDAD = _DataPac1.PAC_EDAD,
                            PAC_COD_ODONT = _DataPac1.PAC_COD_ODONT,
                            PAC_COMUNA = _DataPac1.PAC_COMUNA,
                            PAC_CORREO = _DataPac1.PAC_CORREO,
                            PAC_DIRECCION = _DataPac1.PAC_DIRECCION,
                            PAC_OBSERVACIONES = _DataPac1.PAC_OBSERVACIONES,
                            PAC_OTRAS_COMUNAS = _DataPac1.PAC_OTRAS_COMUNAS,
                            PAC_CONVENIO = _DataPac1.PAC_CONVENIO,
                            PAC_PREVISIONES = _DataPac1.PAC_PREVISIONES,
                            PAC_REPRESENTANTE = _DataPac1.PAC_REPRESENTANTE,
                            PAC_RUT = _DataPac1.PAC_RUT,
                            PAC_SEXO = _DataPac1.PAC_SEXO,
                            PAC_TELEFONO = _DataPac1.PAC_TELEFONO,
                            PAC_FECHA_NAC = _DataPac1.PAC_FECHA_NAC,
                            PAC_FEC_ACT = _DataPac1.PAC_FEC_ACT,
                            PAC_FEC_REG = _DataPac1.PAC_FEC_REG,
                            PAC_IMAGEN = _DataPac1.PAC_IMAGEN,
                            //AL USAR EL METODO ACTUALIZAR AL CARGAR LOS DATOS EN LOS INPUT NO OLVIDAR QUE SE DEBE CARGAR
                            //NUEVAMENTE LOS DropDownList LLAMANDOLO NUEVAMENTE AL FINAL COMO SE VE EN EL CODIGO A CONTINUACION
                            Genero_Lista = _lPacienteGen.GetGenero(_context),
                            Comuna_Lista = _lComuna.GetComuna(_context),
                            Odontologo_Lista = _lOdontologo.GetOdontologo(_context)

                        };
                    if (_dataInput != null)
                    {
                        MODEL_PACIENTE.ErrorMessage = _dataInput.ErrorMessage;
                    }
                }
            }
        }
        else
        {
            var Cod_Pac = 0;
            String TempCodPac = null;
            var Ultimo_Paciente = (from t in _context.TBL_PACIENTE
                                   orderby t.PAC_CODIGO
                                   select t).LastOrDefault();
            if (Ultimo_Paciente != null)
            {
                Cod_Pac = (Ultimo_Paciente.PAC_CODIGO != null) ?
                       Convert.ToInt32(Ultimo_Paciente.PAC_CODIGO) + 1 :
                       1;
                if (Cod_Pac < 10)
                {
                    TempCodPac = String.Concat("0000", Convert.ToString(Cod_Pac));
                }
                else if (Cod_Pac >= 10 && Cod_Pac <= 11)
                {
                    TempCodPac = String.Concat("000", Convert.ToString(Cod_Pac));
                }
                else if (Cod_Pac > 10 && Cod_Pac < 100)
                {
                    TempCodPac = String.Concat("000", Convert.ToString(Cod_Pac));
                }
                else if (Cod_Pac >= 100 && Cod_Pac <=101)
                {
                    TempCodPac = String.Concat("00", Convert.ToString(Cod_Pac));
                }
                else if (Cod_Pac > 100 && Cod_Pac < 1000)
                {
                    TempCodPac = String.Concat("00", Convert.ToString(Cod_Pac));
                }
                else if (Cod_Pac >= 1000 && Cod_Pac <= 1001)
                {
                    TempCodPac = String.Concat("0", Convert.ToString(Cod_Pac));
                }
                else if (Cod_Pac > 1000 && Cod_Pac <= 9999)
                {
                    TempCodPac = String.Concat("0", Convert.ToString(Cod_Pac));
                }
                else if (Cod_Pac > 9999 && Cod_Pac < 99999)
                {
                    TempCodPac = String.Concat("", Convert.ToString(Cod_Pac));
                }
            }
            MODEL_PACIENTE = new PACIENTE
            {
                PAC_CODIGO = TempCodPac,
                Genero_Lista = _lPacienteGen.GetGenero(_context),
                Comuna_Lista = _lComuna.GetComuna(_context),
                Odontologo_Lista = _lOdontologo.GetOdontologo(_context),
                PAC_COD_ODONT = "00000"
            };
        }

        _DataPac2 = _DataPac1;
        _DataPac1 = null;
    }

我方法的代码Save_Patient

    private async Task<bool> Guardar_Paciente_Async()
        {
            _dataInput = MODEL_PACIENTE;
            var valor = false;
            if (ModelState.IsValid)
            {
                var PacLista = _context.TBL_PACIENTE.Where(u => u.PAC_RUT.Equals(MODEL_PACIENTE.PAC_RUT)).ToList();
                if (PacLista.Count.Equals(0))
                {
                    var strategy = _context.Database.CreateExecutionStrategy();
                    await strategy.ExecuteAsync(async () =>
                    {
                        using (var transaction = _context.Database.BeginTransaction())
                        {
                            try
                            {
                                var imagenByte = await _lCargarImagen.ByteAvatarImageAsync(MODEL_PACIENTE.AvatarImage, _environment, "images/user_icon.png");
                                string TmpCodPac = _dataInput.PAC_COD_ODONT;
                                String vfCodPac = TmpCodPac.Substring(0, 4);
                                var Nuevo_Paciente = new MODELO_PACIENTE
                                {
                                    PAC_CODIGO = _dataInput.PAC_CODIGO,
                                    PAC_NOMBRE = _dataInput.PAC_NOMBRE.ToUpper(),
                                    PAC_APELLIDO = _dataInput.PAC_APELLIDO.ToUpper(),
                                    PAC_SEXO = _dataInput.PAC_SEXO,
                                    PAC_RUT = _dataInput.PAC_RUT,
                                    PAC_FECHA_NAC = _dataInput.PAC_FECHA_NAC,
                                    PAC_EDAD = _dataInput.PAC_EDAD,
                                    PAC_REPRESENTANTE = _dataInput.PAC_REPRESENTANTE?.ToUpper(),
                                    PAC_DIRECCION = _dataInput.PAC_DIRECCION?.ToUpper(),
                                    PAC_COMUNA = _dataInput.PAC_COMUNA?.ToUpper(),
                                    PAC_OTRAS_COMUNAS = _dataInput.PAC_OTRAS_COMUNAS?.ToUpper(),
                                    PAC_TELEFONO = _dataInput.PAC_TELEFONO,
                                    PAC_CORREO = _dataInput.PAC_CORREO,
                                    PAC_CONVENIO = _dataInput.PAC_CONVENIO?.ToUpper(),
                                    PAC_PREVISIONES = _dataInput.PAC_PREVISIONES?.ToUpper(),
                                    PAC_OBSERVACIONES = _dataInput.PAC_OBSERVACIONES?.ToUpper(),
                                    PAC_COD_ODONT = vfCodPac,
                                    PAC_IMAGEN = imagenByte,
                                    PAC_FEC_REG = DateTime.Now,
                                    PAC_FEC_ACT = DateTime.Now

                                };
                                await _context.AddAsync(Nuevo_Paciente);
                                _context.SaveChanges();
                                transaction.Commit();
                                _dataInput = null;
                                valor = true;
                            }
                            catch (Exception ex)
                            {
                                _dataInput.ErrorMessage = ex.Message;
                                transaction.Rollback();
                                valor = false;
                            }
                        }
                    });
                }
                else
                {
                    _dataInput.ErrorMessage = $"El RUT {MODEL_PACIENTE.PAC_RUT} ya se encuentra Registrado"; 
// It should show this error in the respective "input", but the error message you see below in the image appears
                }
            }
            else
            {
                foreach (var modelState in ModelState.Values)
                {
                    foreach (var error in modelState.Errors)
                    {
                        _dataInput.ErrorMessage += error.ErrorMessage;
                    }
                }
                valor = false;
            }
            return valor;
        }

如果我调试,当我启动时它会从牙医那里加载 2 条记录 table,但是当我在出现时输入现有 ID 时,错误消息会出现图像中看到的内容以及何时尝试再次加载列表结果为 null

检查ID错误后,“Odontologia Lista”方法returns无效,出现标题错误

问题出在哪里?感谢您的帮助或指导来解决这个问题。

您可以尝试查看以下代码:

MODEL_PACIENTE = new PACIENTE
            {
                PAC_CODIGO = TempCodPac,
                //Genero_Lista = _lPacienteGen.GetGenero(_context),
                Comuna_Lista = _lComuna.GetComuna(_context),
                //Odontologo_Lista = _lOdontologo.GetOdontologo(_context),
                PAC_COD_ODONT = "00000"
            };

Odontologo_Lista = _lOdontologo.GetOdontologo(_context), is commented.If _dataInput == null && _DataPac1 == null && _DataPac2 == null, Odontologo_Lista 不会被设置, 你会得到错误 Value cannot be null.