C#MVC4对象引用未设置为对象的实例

时间:2014-03-19 11:48:21

标签: c# asp.net-mvc-4

我遇到了一个我无法理解的问题。我定义了一个模型并使用它来创建一个表单,其中两个是我想用来创建复选框字段的列表。问题是当我向这些列表添加值时,我在定义模型实例时遇到错误。

让我用一些代码来清除事情。

我的模特课:

public class Recurso
{
    public int IDRecurso { get; set; }

    [Required(ErrorMessage = "Selecione um tipo de recurso.")]
    [Display(Name = "Tipo Recurso")]
    public int IDTipoRecurso { get; set; }

    public DateTime DataHora { get; set; }

    [Required(ErrorMessage = "Dê um titulo ao recurso.")]
    [Display(Name = "Titulo")]
    public string Titulo { get; set; }

    [Required(ErrorMessage = "Escreva uma breve descrição do recurso.")]
    [Display(Name = "Descrição")]
    public string Descricao { get; set; }

    [Required(ErrorMessage = "Adicione o ficheiro.")]
    [Display(Name = "Recurso")]
    public HttpPostedFileBase Ficheiro { get; set; }
    public string Mime { get; set; }

    [Display(Name = "Associar Recurso")]
    public int Associacao { get; set; }

    [Display(Name = "Tipos de Clientes")]
    public List<int> TiposClientes { get; set; }

    [Display(Name = "Clientes")]
    public List<int> Clientes { get; set; }
}

在Controler中:

public ActionResult AdicionarRecurso()
    {
        Recurso model = new Recurso();

        string email = this.GetEmailFromCookie();
        string key = Admin.GetUserKey(email);

        List<Entidades> clientes = Admin.GetAllClientes(email);
        foreach (Entidades cliente in clientes)
        {
            model.Clientes.Add(cliente.IDEntidade);
        }
        List<TiposClientes> tipos = Admin.GetTiposClientes(email);
        foreach (TiposClientes tipo in tipos)
        {
            model.TiposClientes.Add(tipo.IDTipoCliente);
        }

        return View(model);
    }

这会在此行Object reference not set to an instance of an object中出现Recurso model = new Recurso();错误。 但是如果删除这部分代码,它就可以正常工作:

List<Entidades> clientes = Admin.GetAllClientes(email);
foreach (Entidades cliente in clientes)
{
    model.Clientes.Add(cliente.IDEntidade);
}
List<TiposClientes> tipos = Admin.GetTiposClientes(email);
foreach (TiposClientes tipo in tipos)
{
    model.TiposClientes.Add(tipo.IDTipoCliente);
}

我不明白为什么。

此外,我甚至不确定是否可以为模型列表ClientesTiposClientes生成复选框列表。

1 个答案:

答案 0 :(得分:2)

在对这些属性调用Clientes之前,您需要在模型上实例化属性TiposClientesAdd(),否则它们仍为null

尝试更改:

List<Entidades> clientes = Admin.GetAllClientes(email);
foreach (Entidades cliente in clientes)
{
    model.Clientes.Add(cliente.IDEntidade);
}
List<TiposClientes> tipos = Admin.GetTiposClientes(email);
foreach (TiposClientes tipo in tipos)
{
    model.TiposClientes.Add(tipo.IDTipoCliente);
}

List<Entidades> clientes = Admin.GetAllClientes(email);
model.Clientes = new List<int>(); // Added this line to instantiate the property
foreach (Entidades cliente in clientes)
{
    model.Clientes.Add(cliente.IDEntidade);
}
List<TiposClientes> tipos = Admin.GetTiposClientes(email);
model.TiposClientes = new List<int>(); // Added this line to instantiate the property
foreach (TiposClientes tipo in tipos)
{
    model.TiposClientes.Add(tipo.IDTipoCliente);
}