ViewD

时间:2016-08-09 12:31:17

标签: c# asp.net-mvc html.dropdownlistfor viewbag dropdownlistfor

我试图显示一个下拉列表,用于使用从Controller传递数据到View页面的ViewBag,但是我收到以下错误:

  

最好的重载方法匹配' System.Web.Mvc.SelectList.SelectList(System.Collections.IEnumerable,string,string)'有一些无效的参数"

这是我的ViewModel:

public class CadastroCategoriaViewModel : ViewModelBase
{
    #region Construtores

    public CadastroCategoriaViewModel()
    {

    }

    #endregion

    #region Propriedades

    /// <summary>
    /// Perfil de usuário em cadastro ou edição.
    /// </summary>
    public CategoriaFinanceira CategoriaFinanceira { get; set; }

    public bool eFilho { get; set; }
}

继承此模型:

public class CategoriaFinanceira
{
    public int CategoriaFinanceiraID { get; set; }

    [DisplayNameLocalizavel(NomeMensagensCategoriaFinanceira.Nome, typeof(MensagensCategoriaFinanceira))]
    [ValidacaoCampoObrigatorio]
    [ValidacaoTamanhoTexto(255, MinimumLength = 1)]
    public string Nome { get; set; }

    [DisplayNameLocalizavel(NomeMensagensCategoriaFinanceira.TipoPermiteLancamento, typeof(MensagensCategoriaFinanceira))]
    [ValidacaoCampoObrigatorio]
    public EnumTipoPermiteLancamento TipoPermiteLancamentoID { get; set; }

    [ValidacaoCampoObrigatorio]
    [Display(Name = "Tipo")]
    public EnumTipoLancamento TipoLancamentoID { get; set; }

    [ValidacaoCampoObrigatorio]
    public int EmpresaID { get; set; }

    //public virtual Empresa Empresa { get; set; }

    public int? PaiCategoriaFinanceiraID { get; set; }

    public virtual CategoriaFinanceira PaiCategoriaFinanceira { get; set; }

    public virtual ICollection<CategoriaFinanceira> FilhosCategoriasFinanceiras { get; set; }

    //public virtual CategoriaFinanceiraRelacao CategoriaFinanceiraRelacao { get; set; }

    [DisplayNameLocalizavel(NomeMensagensCategoriaFinanceira.UsuarioIdCadastro, typeof(MensagensCategoriaFinanceira))]
    [ValidacaoCampoObrigatorio]
    public int CadastroUsuarioID { get; set; }

    [DisplayNameLocalizavel(NomeMensagensCategoriaFinanceira.CadastroData, typeof(MensagensCategoriaFinanceira))]
    [ValidacaoCampoObrigatorio]
    public DateTime CadastroData { get; set; }

    [DisplayNameLocalizavel(NomeMensagensCategoriaFinanceira.AtualizacaoUsuarioID, typeof(MensagensCategoriaFinanceira))]
    public int? AtualizacaoUsuarioID { get; set; }

    [DisplayNameLocalizavel(NomeMensagensCategoriaFinanceira.AtualizacaoData, typeof(MensagensCategoriaFinanceira))]
    public DateTime? AtualizacaoData { get; set; }

    [DisplayNameLocalizavel(NomeMensagensCategoriaFinanceira.InativacaoUsuarioID, typeof(MensagensCategoriaFinanceira))]
    public int? InativacaoUsuarioID { get; set; }

    [DisplayNameLocalizavel(NomeMensagensCategoriaFinanceira.InativacaoData, typeof(MensagensCategoriaFinanceira))]
    public DateTime? InativacaoData { get; set; }
}

DropDownListFor我尝试使用

<section class="col col-6">
            <label class="select">
                @Html.DropDownListFor(model => model.CategoriaFinanceira.PaiCategoriaFinanceiraID, new SelectList(ViewBag.CategoriasPai, "CategoriaFinanceiraID", "Nome"))
                <i></i>
            </label>
        </section>

我正在通过我的ViewBag:

public ActionResult CadastrarFilho()
    {
        Empresa empresa = new Empresa();
        if (Session["Empresa"] != null)
        {
            empresa = ((Empresa)Session["Empresa"]);
        }

        var viewModel = new CadastroCategoriaViewModel();

        viewModel.eFilho = true;

        viewModel.CategoriaFinanceira = new CategoriaFinanceira();

        ViewBag.CategoriasPai = _servicoAppGerenciadorCategoriaFinanceira.ListarPorEmpresa(TokenAcesso, empresa.EmpresaID);

        return PartialView(viewModel);
    }

有人可以给我一些线索或暗示吗?

1 个答案:

答案 0 :(得分:0)

将选择列表中的数据从控制器传递到视图。如下所示 在ccontroller中

public ActionResult CadastrarFilho()
{
  .
  .      
   ViewBag.CategoriasPai = new SelectList(_servicoAppGerenciadorCategoriaFinanceira.ListarPorEmpresa(TokenAcesso, empresa.EmpresaID), "CategoriaFinanceiraID",  "Nome");

   return PartialView(viewModel);
}

并在视图中

@Html.DropDownListFor(model => model.CategoriaFinanceira.PaiCategoriaFinanceiraID, ViewBag.CategoriasPai  as SelectList())

希望这会有所帮助