2011-12-02 68 views
1

我正在使用ASP.NET MVC 3创建博客。我已经创建了查看列表博客文章,同时单击博客导航链接。我也尝试列出布局中的博客类别,以便将博客类别列表显示到每个链接。问题是,当我点击博客类别列表链接时,它显示运行时错误,如“对象引用未设置为对象的实例”。在_Layout页面的这段代码中。将模型从一个控制器传递到MVC中的布局3

@foreach (Tag tag in (IEnumerable<Tag>)ViewBag.tag) 
    { 
     <a href="@Href("~/Posts/Tags/" + tag.Name)"> @tag.Name </a> 

    } 

在控制器的博客我已通过ViewBag传递数据。

IEnumerable<Tag> tags = from tag in model.Tags select tag; 
ViewBag.tag = tags; 

这里我也复制此代码导航链接控制器的每个控制器将数据传递到布局,使博客类别列表可以出现在所有链接page.As这是againsts“干”。 你会plz帮助我,让每个博客分类链接到达其相应的分类博客。

+0

变量在传递给ViewBag之前是否设置了变量?如果你想在'ViewBag.tag = tags'这行上断开,它肯定是从模型中设置的值。标签? – Dangerous

+0

雅,ViewBag.tag值设置与model.Tags值。 –

回答

1

我在博客上实现了一些标签类别。

我创建了一个文件夹,我在我的项目中称为HtmlHelpers。在这里面我有一个名为DisplayHelpers.cs的类,其中包含这样的代码。您_Layout.cshtml页面内

namespace ProjectName.HtmlHelpers 
{ 
    public static class DisplayHelpers 
    { 
     public static MvcHtmlString GetTags() 
     { 
      var tags = from tag in model.Tags select tag; 

      StringBuilder sb = new StringBuilder(); 

      foreach (Tag tag in tags) 
      { 
       sb.AppendFormat("<a href="{0}"> {1} </a>", 
        // link, 
        tag.Name); 
      } 

      return new MvcHtmlString(sb.ToString()); 
     } 
    } 
} 

现在,调用这个函数是这样的:

@DisplayHelpers.GetTags() 

现在,无论你调用这个函数的标记应该出现!

在旁注中,我可以说服你将锚标签嵌入到无序列表中吗?由于它充当标签链接的“集合”,将它们放在列表中有助于将它们组织成单个“实体”。

+0

非常感谢JesseB。它非常有帮助并解决了我的问题。正如你所说的,我已经使用无序列表。而且,使用sb.AppendFormat存在问题。当我第一次点击博客类别链接时,它可以工作,但第二次点击链接时,锚点href路径被追加到前一个锚点href路径。是否有其他功能可以避免这个问题。再次感谢您的想法。 –

相关问题