2013-12-18 76 views
2

我在閱讀@foreach上的我的觀點時發生此錯誤。@foreach模型爲null:System.NullReferenceException:未將對象引用設置爲對象的實例

異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。型號爲空。

這是我的userprofile模型。

public class UsersContext : DbContext 
{ 

    public UsersContext() 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<UserProfile> UserProfiles { get; set; } 
    public DbSet<Secretarias> Secretarias { get; set; } 
    public DbSet<Secretarias_Direcciones> Secretarias_Direcciones { get; set; } 
} 

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    public int UserId { get; set; } 
    [Required] 
    public string Nombre { get; set; } 
    [Required] 
    public int SecretariaId { get; set; } 
    [Required] 
    public int DireccionId { get; set; } 
    [Required] 
    public string UserName { get; set; } 

} 

這是我的控制

public ActionResult ListaUsuarios() 
{ 
    UsersContext db = new UsersContext(); 
    var model = from usrs in db.UserProfiles 
       select new { usrs.UserId, usrs.Nombre, usrs.UserName, usrs.SecretariaId, usrs.DireccionId }; 
    ViewBag.Model = model.ToList(); 

    return View(); 
} 

這是我的看法

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Nombre) 
     </td> 
       <td> 
      @Html.DisplayFor(modelItem => item.UserName) 
     </td> 
       <td> 
      @Html.DisplayFor(modelItem => item.SecretariaId) 
     </td> 
       <td> 
      @Html.DisplayFor(modelItem => item.DireccionId) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.UserId }) | 
      @Html.ActionLink("Details", "Details", new { id=item.UserId}) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.UserId }) 
     </td> 
    </tr> 
} 

下面是異常詳細信息:

System.NullReferenceException: Object reference not set to an instance 
of an object. Model is null. 
+0

我再次編輯我的問題 – elmona

回答

4

因爲您尚未將強類型模型傳遞給您的視圖,您將獲得NullReferenceException。所以在你的foreach循環中,Modelnull。正常的做法是這樣的:

return View(model); 

真正的問題是,你在這裏混合不同的概念。您試圖以強類型的方式訪問模型的屬性,但您正在定義一個ViewBag.Model屬性,該屬性是動態的,並且與視圖中的Model屬性無關。

如果你想以強類型的方式訪問你的模型,這當然是我建議你這樣做的方式,你需要做一些改變。我建議你先定義一個視圖模型來表示一個UserProfile數據:

public class UserProfileViewModel 
{ 
    public int UserId { get; set; } 
    public string Nombre { get; set; } 
    public int SecretariaId { get; set; } 
    public int DireccionId { get; set; } 
    public string UserName { get; set; } 
} 

現在,改變你的行動創造這些列表:

public ActionResult ListaUsuarios() 
{ 
    using (UsersContext db = new UsersContext()) 
    { 
     var model = from usrs in db.UserProfiles 
        select new UserProfileViewModel 
        { 
         UserId = usrs.UserId, 
         Nombre = usrs.Nombre, 
         UserName = usrs.UserName, 
         SecretariaId = usrs.SecretariaId, 
         DireccionId = usrs.DireccionId 
        }; 

     return View(model.ToList()); 
    } 
} 

注意,我做了這裏有幾個變化。首先,我添加了using聲明以確保UsersContext正確處置。接下來,我更改了查詢來實例化UserProfileViewModel,而不是匿名類型。最後,我直接將model作爲參數傳遞給View(),確保在其上調用ToList(),以便在UsersContext處置之前評估該查詢。

最後,你只需要做出一個改變你的看法:

@model List<UserProfileViewModel> 

@foreach (var item in Model) 
{ 
    // rest of code goes here 
} 

@model指令指定的確切型號類型視圖應該會收到,從而使得強類型。

+0

我做的修改,但現在我有這個錯誤 {「無法隱式轉換類型‘System.Collections.Generic.List <<> f__AnonymousType5 <整型,字符串,字符串,INT,INT >>’到「Juareznlmvc .Models.UserProfile'「} – elmona

+0

@elmona更新了我的答案。對不起,我在查詢中犯了一個錯誤。 –

+0

約翰•H•當我加入這個在標題表鴕鳥政策閱讀 @ Html.DisplayNameFor(型號=> model.UserId) – elmona

1

很明顯 - 檢查每一個數據類型你正在使用的表演的表演orm加入你的數據庫。同時確保數據庫數據類型被映射到正確的.Net數據類型。

如果您的ID字段的數據類型似乎沒問題,我會建議縮小哪個連接導致錯誤。修改您的LINQ表達式以使其具有單個連接並確保沒有錯誤。一次添加其他連接,直到出現錯誤。

+0

我沒有單個連接和我檢查所有數據類型的人都是我的表INT。不行。 – elmona

+0

我再次編輯我的問題 – elmona

0

對於您的模型,請檢查它是否正在填充。 根據發生的情況,可能是您的模型僅爲空 ,並且可能其類型可能不是預期的。

- 在控制器上的模型上下文的引用foreach循環將讓你看到的值

相關問題