2013-01-15 32 views
5

Tôi là một newbie mvc.ASP.net MVC 4 tải menu từ cơ sở dữ liệu để xem một phần

Điều tôi đang cố làm là tải trình đơn từ cơ sở dữ liệu và hiển thị trong chế độ xem từng phần. Chế độ xem một phần này sẽ được gọi từ chế độ xem _layout.

Trang chủ điều khiển

trong điều khiển Trang chủ tôi thêm một hành động gọi là "_MainMenu"

PartialView

đây là _MainMenu PartialView tôi

@model IEnumerable<appMRP.Models.menu> 
<ul id="menu"> 
    @foreach (var item in Model) 
    { 
     <li>@item.menu1</li> 
    }            
</ul> 
.210

Page Layout

đơn phần này được hiển thị trong _Layout.cshtml của tôi như thế này

<nav>      
    @Html.Partial("_MainMenu") 
</nav> 

khi tôi chạy này. tôi đã nhận lỗi "NullReferenceException là unhandled theo mã người dùng. Object tài liệu tham khảo không được đặt để một thể hiện của một đối tượng"

vẻ như "Model" trong _MainMenu của tôi là null

những gì đã làm tôi làm sai?

cảm ơn bạn

Trả lời

9

Nếu xem một phần của bạn sử dụng một mô hình, bạn cần phải vượt qua nó trong như thế này:

@Html.Partial("_MainMenu", Model.ListOfMenus) 

hoặc một cái gì đó để có hiệu lực đó. Hiện tại, bạn không chỉ định mô hình cho chế độ xem _MainMenu, do đó, null được sử dụng. Khi bạn thử một số @foreach, nó sẽ ném ngoại lệ mà bạn nhìn thấy.

Lưu ý rằng @Html.Partial("_MainMenu") không gọi hành động điều khiển _MainMenu của bạn, chỉ hiển thị chế độ xem tên đó.

Nếu bạn muốn gọi một hành động, bạn có thể sử dụng một hành động con như thế này:

@Html.Action("_MainMenu", "HomeController") 
+0

Cảm ơn bạn. tôi sử dụng @ Html.Action ("_ MainMenu", "HomeController") và nó hoạt động –

4

bạn đã có câu trả lời. kiểm tra _db.menu.ToList() không trả về null. Tôi đề nghị bạn sử dụng mẫu Model-View-ViewModel. tạo mô hình cho chế độ xem. và đưa nó về Chế độ xem để bạn có thể kiểm soát mô hình và những gì hiển thị cho chế độ xem.

  1. Bạn không chuyển thông tin mô hình vào phương pháp HTML một phần, vì kết quả, bạn cố gắng lặp qua bộ sưu tập. vì vậy nó sẽ ném một ngoại lệ tham chiếu null.

một số điều như thế này

public class MenuViewModel 
{ 
     public int menuID { get; set; } 
     public string menuname { get; set; } 
     public string otherProperty { get; set; } 
     public string someotherProperty { get; set; } 
} 

trong Xem bạn

@model IEnumerable<MenuViewModel> 

<nav>      
    @Html.Partial("_MainMenu",Model) 
</nav> 
+0

Cảm ơn bạn. điều này thêm knowldge của tôi cho khái niệm mvc. –

Các vấn đề liên quan