2014-03-19 115 views
0

我遇到了一個我無法理解的問題。我定義了一個模型並使用它來創建一個表單,其中兩個是我想用來創建複選框字段的列表。問題是當我將值添加到這些列表時,我在定義模型實例時遇到了一個錯誤。C#MVC4未將對象引用設置爲對象的實例

讓我放一些代碼來清除事情。

我的模型類:

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生成複選框列表。

+0

我想在這行RECURSO模型沒有失敗=新RECURSO() –

+0

燁,該行是沒有問題的,但是那是一個當我打開頁面時給我錯誤。 – FabioG

回答

2

你需要調用這些屬性Add()之前實例的屬性你的模型ClientesTiposClientes,否則他們仍然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); 
} 
+0

是啊!而已。現在我只需要弄清楚如何將這些值轉換爲複選框列表,並在提交時在我的模型中接收de選定的值。 – FabioG

+0

嘗試http://stackoverflow.com/questions/220020/how-to-handle-checkboxes-in-asp-net-mvc-forms(通過搜索「mvc list of checkboxes」找到) – Chris

+0

謝謝,但我會擁有使用另一個aproach而不是複選框,因爲我被告知會有1000多個客戶端的列表,並且複選框不是一個可行的方法來實現這一點。 – FabioG

相關問題