2011-11-28 56 views
2

我正在創建一個麪包屑部分視圖,它包含標題/ URL的集合。該集合將在操作方法中生成,並且必須在麪包屑部分視圖中可用。如何在mvc 3中跨視圖和部分視圖傳遞變量?

我試圖把它做對夫婦的方式,這是在這樣的一個:http://goo.gl/rMFlp

但一些如何我無法得到它的工作。我得到的只是一個「未設置爲對象實例的對象引用」。你們能幫我嗎?

{Updare} 下面是代碼:

我創建的模型類,如下所示

public class ShopModel 
{ 
    public Dictionary<string,string> Breadcrumb { get; set; } 
} 

處理法

public ActionResult Index() 
    { 
     var breadcrumbCollection = new Dictionary<string,string>(); 
     breadcrumbCollection.Add("/home","Home"); 
     breadcrumbCollection.Add("/shop","Shop"); 

     var model = new ShopModel() { Breadcrumb = breadcrumbCollection}; 

     return View(model); 
    } 

模型結合視圖 - 索引

@Model NexCart.Model.Model.Custom.ShopModel 

最後這裏是局部視圖代碼:

<div> 
@{ 
    foreach (var item in @Model.Breadcrumb) 
    { 
     <a href="#">@item.Key</a> 
    } 
    } 

+3

請張貼您的代碼。 – Maess

回答

1

您還沒有表現出任何代碼,所以你的問題是不可能的回答。這就是說你可以繼續下去。一如往常,在ASP.NET MVC應用程序,你首先來定義視圖模型:

public class Breadcrumb 
{ 
    public string Title { get; set; } 
    public string Url { get; set; } 
} 

,那麼你可以寫一個控制器的動作,將填充的麪包屑集合,並將它們傳遞到局部視圖:

public class BreadcrumbController: Controller 
{ 
    public ActionResult Index() 
    { 
     // TODO: pull the breadcrumbs from somewhere instead of hardcoding them 
     var model = new[] 
     { 
      new Breadcrumb { Title = "Google", Url = "http://www.google.com/" }, 
      new Breadcrumb { Title = "Yahoo", Url = "http://www.yahoo.com/" }, 
      new Breadcrumb { Title = "Bing", Url = "http://www.bing.com/" }, 
     }; 
     return PartialView(model); 
    } 
} 

然後,你可以有這會使這模型(~/Views/Breadcrumb/Index.cshtml)對應的局部視圖:

@model IEnumerable<Breadcrumb> 
<ul> 
    @Html.DisplayForModel() 
</ul> 

和相應的顯示模板( ~/Views/Breadcrumb/DisplayTemplates/Breadcrumb.cshtml):

@model Breadcrumb 
<li> 
    <a href="@Model.Url">@Model.Title</a> 
</li> 

現在,所有剩下的就是包括這個孩子的動作使用Html.Action helper地方。例如,如果重複每一頁上這個麪包屑,你可以在_layout做到這一點:

@Html.Action("Index", "Breadcrumb") 

但很明顯,它也可以在任何視圖來完成。

+0

感謝@Darin,我想知道在這種情況下使用的一般模式。不過,我遲遲沒有發佈我的代碼。感謝您的幫助.. :) – Amit

+0

我得到它的工作......謝謝.. :) – Amit