C# MVC 3中从一个控制器到布局的模型传递

C# MVC 3中从一个控制器到布局的模型传递,c#,.net,asp.net-mvc-3,razor,C#,.net,Asp.net Mvc 3,Razor,我用ASP.NETMVC3创建博客。我在单击博客导航链接时创建了列出博客文章的视图。我还尝试在布局中列出博客类别,以便在每个链接中显示博客类别列表。问题是,当我单击博客类别列表链接时,它会显示运行时错误,如“对象引用未设置为对象的实例”。在此代码的_布局页面中 @foreach (Tag tag in (IEnumerable<Tag>)ViewBag.tag) { <a href="@Href("~/Posts/Tags/" + tag.Nam

我用ASP.NETMVC3创建博客。我在单击博客导航链接时创建了列出博客文章的视图。我还尝试在布局中列出博客类别,以便在每个链接中显示博客类别列表。问题是,当我单击博客类别列表链接时,它会显示运行时错误,如“对象引用未设置为对象的实例”。在此代码的_布局页面中

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

     }
@foreach(在(IEnumerable)ViewBag.Tag中标记Tag)
{
}
在博客控制器中,我通过ViewBag传递了数据

 IEnumerable<Tag> tags = from tag in model.Tags select tag;
 ViewBag.tag = tags;
IEnumerable tags=来自模型中的标记。标记选择标记;
ViewBag.tag=标签;
在这里,我还将此代码复制到导航链接控制器的每个控制器,以便将数据传递到布局,以便博客类别列表可以出现在所有链接页面中。因为这是针对“干燥”的。
请您帮助我,使每个博客类别链接都能到达相应的类别博客。

我在博客上实现的标记类别略有不同

我在项目中创建了一个名为
HtmlHelpers
的文件夹。在这个类中,我有一个名为
DisplayHelpers.cs
的类,它包含这样的代码

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());
        }
    }
}
现在你的标签应该出现在你调用这个函数的任何地方


顺便说一句,我能说服你将锚定标签嵌入无序列表中吗?由于它充当标记链接的“集合”,将它们放在列表中有助于将它们组织成单个“实体”。

我在我的博客上实现的标记类别略有不同

我在项目中创建了一个名为
HtmlHelpers
的文件夹。在这个类中,我有一个名为
DisplayHelpers.cs
的类,它包含这样的代码

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());
        }
    }
}
现在你的标签应该出现在你调用这个函数的任何地方


顺便说一句,我能说服你将锚定标签嵌入无序列表中吗?由于它充当标记链接的“集合”,因此将它们放在列表中有助于将它们组织为单个“实体”。

在传递到ViewBag之前是否设置了标记变量?如果要在“ViewBag.tag=tags;”行中断是否确实使用model.Tags中的值进行了设置?是的,ViewBag.tag值是使用model.Tags的值进行设置的。Tags变量在传递到ViewBag之前是否已设置?如果要在“ViewBag.tag=tags;”行中断它确实是用model.Tags的值设置的吗?是的,ViewBag.tag的值是用model.Tags的值设置的。非常感谢JesseB。这对解决我的问题很有帮助。正如你们所说,我已经使用了无序列表。而且,使用sb.AppendFormat存在问题。当我第一次单击博客类别链接时,它会工作,但第二次单击链接时,锚href路径会附加到以前的锚href路径。是否有其他功能可避免此问题。再次感谢你的想法,非常感谢JesseB。这对解决我的问题很有帮助。正如你们所说,我已经使用了无序列表。而且,使用sb.AppendFormat存在问题。当我第一次单击博客类别链接时,它会工作,但第二次单击链接时,锚href路径会附加到以前的锚href路径。是否有其他功能可避免此问题。再次感谢你的想法。