【问题标题】:DropDown List, problem to save value, returning null object下拉列表,保存值的问题,返回空对象
【发布时间】:2019-03-16 23:57:01
【问题描述】:

嗯,在我的项目中使用 DDD,我在使用下拉菜单时遇到问题

我已经可以在下拉列表中加载“ClasseBarco”类的数据,但我无法将选择保存在数据库中

“BarcoViewModel”类与“ClasseBarcoViewModel”类具有一对多的关系。当我尝试在下拉列表中保存所选选项时,出现以下错误:“classeBarco 为空”。使用EditorFor我可以保存,当我使用下拉菜单时我无法保存

调用其他 3 个类的 ViewmodeClass

public class BarcoClasseViewModel


{
    public BarcoViewModel Barco { get; set; }

    public ClasseBarcoViewModel ClasseBarco { get; set; }

    public TipoOperacaoDoBarcoViewModel TipoOperacaoDoBarco{ get; set; }

   }

ViewModeBarco

   public class BarcoViewModel
   {
     public BarcoViewModel()
     {
        Id = Guid.NewGuid();
    }


    [Key]
    public Guid Id { get; set; }

    [Required(ErrorMessage = "Campo Obrigatório")]
    public string Nome { get; set; }

    [Required(ErrorMessage = "Campo Obrigatório")]
    public bool Ativo { get; set; }

    [Display(Name = "Registro SAP")]
    [Required(ErrorMessage = "Campo Obrigatório")]
    public int SapId { get; set; }

    [Display(Name = "Tancagem Água")]
    [Required(ErrorMessage = "Campo Obrigatório")]
    public int CapacidadeAgua { get; set; }

    [Display(Name = "Tancagem óleo")]
    [Required(ErrorMessage = "Campo Obrigatório")]
    public int CapacidadeOleo { get; set; }


    [Required(ErrorMessage = "Campo Obrigatório")]
    public int Velocidade { get; set; }

    [Required(ErrorMessage = "Preencha o campo E-mail")]
    [MaxLength(100, ErrorMessage = "Máximo {0} caracteres")]
    [EmailAddress(ErrorMessage = "Preencha um E-mail válido")]
    [Display(Name ="E-mail")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Campo Obrigatório")]
    public string Setor { get; set; }

    [ScaffoldColumn(false)]
    public DateTime DataCadastro { get; set; }

    [ScaffoldColumn(false)]
    public bool Excluido { get; set; }

    [ScaffoldColumn(false)]
    public int ClasseBarcoId { get; set; }

    [ScaffoldColumn(false)]
    public ClasseBarcoViewModel classeBarco { get; set; }

    [ScaffoldColumn(false)]
    public TipoOperacaoDoBarcoViewModel TipoOperacaoDoBarco { get; set; }

    [ScaffoldColumn(false)]
    public DomainValidation.Validation.ValidationResult ValidationResult { get; set; }

}

}

ViewModelClasseBarco 公共类 ClasseBarcoViewModel {

    public ClasseBarcoViewModel()
    {
        Id = Guid.NewGuid();
    }

    [Key]
    public Guid Id { get; set; }

    [Display(Name ="Classe")]  
    [Required(ErrorMessage ="Campo Obrigatório")]
    public string Nome { get; set; }

    [ScaffoldColumn(false)]
    public bool Ativo { get; set; }


    [ScaffoldColumn(false)]
    public DateTime DataCadastro { get; set; }

    [ScaffoldColumn(false)]
    public Guid ClasseBarcoId { get; set; }

}

控制器

      [Authorize(Roles = "Administrator")]
      [Route("criar-novo")]
       public ActionResult Create()
      {
        ViewBag.ClasseBarcoId = new   SelectList(_barcoAppService.ObterTodasAsClasses(), "ClasseBarcoId", "Nome");

        return PartialView();
    }

    // POST: Barcos/Create
    [Authorize(Roles = "Administrator")]
    [Route("criar-novo")]
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(BarcoClasseViewModel barcoClasseViewModel)
    {
        if (!ModelState.IsValid) return PartialView(barcoClasseViewModel);

        ViewBag.ClasseBarcoId = new SelectList(_barcoAppService.ObterTodasAsClasses(), "ClasseBarcoId", "Nome", barcoClasseViewModel.Barco.ClasseBarcoId);

        var barcoEnd = _barcoAppService.Add(barcoClasseViewModel);


        if (barcoEnd.Barco.ValidationResult.IsValid) return RedirectToAction("Index");

        PopularModelStateComErros(barcoEnd.Barco.ValidationResult);


        return PartialView(barcoClasseViewModel);


    }

查看

 <div class="form-group">
              @Html.LabelFor(model => model.Barco.ClasseBarcoId,   htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-3">
                @Html.DropDownList("ClasseBarcoId", String.Empty)
                @Html.ValidationMessageFor(model => model.Barco.ClasseBarcoId, "", new { @class = "text-danger" })
            </div>
        </div>

【问题讨论】:

    标签: c# asp.net asp.net-mvc visual-studio model-view-controller


    【解决方案1】:

    您必须在构造函数中委托新类,因为如果您的属性未设置,您将在获取值时遇到异常。

    public class BarcoClasseViewModel
    
    public BarcoClasseViewModel()
    {
      Barco = new BarcoViewModel();
      ClasseBarco = new ClasseBarcoViewModel();
      TipoOperacaoDoBarco = new TipoOperacaoDoBarcoViewModel();
    }
    
    {
      public BarcoViewModel Barco { get; set; }
      public ClasseBarcoViewModel ClasseBarco { get; set; }
      public TipoOperacaoDoBarcoViewModel TipoOperacaoDoBarco{ get; set; }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多