【问题标题】:C# MVC4 Object reference not set to an instance of an objectC# MVC4 对象引用未设置为对象的实例
【发布时间】:2014-03-19 11:48:21
【问题描述】:

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

让我放一些代码来清除一些东西。

我的模型课:

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; }
}

在控制器中:

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);
    }

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

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 生成复选框列表。

【问题讨论】:

  • 我认为它失败不在这行 Recurso model = new Recurso()
  • 是的,那一行不是问题,但那是我打开页面时出现错误的那一行。

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


【解决方案1】:

您需要先在模型上实例化属性ClientesTiposClientes,然后再对这些属性调用Add(),否则它们仍然是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);
}

【讨论】:

  • 是的!就是这样。现在我只需要弄清楚如何将这些值转换为复选框列表并在提交时在我的模型中接收选定的值。
  • 试试stackoverflow.com/questions/220020/…(通过搜索mvc list of checkboxes找到)
  • 谢谢,但我将不得不使用另一种方法而不是复选框,因为有人告诉我会有 1000 多个客户的列表,而复选框不是实现此目的的可行方法。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多