ModelState.IsValid проверяет ссылочную сущность - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующая сущность:

public class Ambiente
{
    public int AmbienteId { get; set; }

    [Display(Name ="Codigo del Ambiente")]
    [StringLength(10, ErrorMessage ="El ancho máximo es de 10 caracteres")]
    public string Codigo { get; set; }

    [Display(Name ="Nombre del Ambiente")]
    [StringLength(50, ErrorMessage ="El ancho máximo es de 50 caracteres")]
    public string Nombre { get; set; }

    [Required(ErrorMessage ="Especifique una etapa")]
    [Display(Name ="Nombre de la Etapa")]
    public Etapa Etapa { get; set; }
}

, как вы можете видеть, у этого класса есть свойство, которое ссылается на сущность с именем Etapa

public class Etapa
{
    public int EtapaId { get; set; }

    [Required(ErrorMessage ="Especifique un nombre de Etapa")]
    [StringLength(20, ErrorMessage = "El ancho maximo es de 20")]
    [Display(Name ="Nombre de la Etapa")]
    public string Nombre { get; set; }
}

Этот класс Etapa имеет проверку надсобственность Nombre.Теперь, что касается класса Ambiente, при отправке данных для вставки в базу данных я использую этот код в своем вставочном действии:

[HttpPost]
public IActionResult Insertar(Ambiente ambiente)
{
    if (ModelState.IsValid)
    {
        try
        {
            _ambienteRepository.Insertar(ambiente);
            return RedirectToAction("Index");
        }
        catch (Exception ex)
        {
            ModelState.AddModelError("", ex.Message);
        }
    }
    var ambienteViewModel = ObtenerAmbienteViewModel(ambiente);
    return View(ambienteViewModel);
}

когда этот код достигает предложения ModelState.IsValid, он выдает false и следующее сообщениеПоявляется:

"Especifique un nombre de Etapa"

Это текст свойства Nombre моего класса Etapa.

enter image description here

Когда я быстро просматриваю свою переменную ambiente по параметру в моем действии Insertar, я вижу следующее:

enter image description here

Эта сущность Etapa используется для заполнения раскрывающегося списка на мой взгляд.Все значения уже существуют в базе данных, поэтому я не собираюсь добавлять записи к этой сущности.

enter image description here

Я не знаю, как обойтивалидация этой ссылочной сущности Etapa.

1 Ответ

0 голосов
/ 12 декабря 2018

Обычным способом является создание модели представления, не включайте свойство Etapa.Присвойте значения объекту Ambiente на стороне сервера перед вставкой в ​​базу данных.

Если вы не хотите ничего менять.Основываясь на своем коде, вы можете игнорировать ошибку состояния модели для Etapa следующим образом (но это не очень хорошая идея):

ModelState.Remove("Etapa");

Затем присвойте необходимое значение Etapa, чтобы убедиться, что Nombre не пусто.Код понравится:

ModelState.Remove("Etapa");
if (ModelState.IsValid)
{
    var etapa = _context.Etapa.First(a => a.EtapaId == ambiente.Etapa.EtapaId);
    ambiente.Etapa = etapa;
    _context.Add(ambiente);
    await _context.SaveChangesAsync();
    .....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...