部分视图由2个视图使用,从每个视图访问ViewModel数据

时间:2015-06-10 16:39:00

标签: c# asp.net-mvc mvvm asp.net-mvc-partialview

我有2个视图模型,每个视图模型都有一个名为RSSFeed的RSS类型的属性。我有2个视图(每个视图模型一个),我希望它们共享相同的部分视图,在RSSFeed中呈现数据。

在我的主要观点中,我有:

@{ Html.RenderPartial("Social", new ViewDataDictionary(Model)); }

在我的社交活动中,我想使用类似的东西:

@ViewBag.RSSFeeds.Feed[0].Title

运行它给我'无法对空引用'

执行运行时绑定

每个ViewModel都有:

public RSS RSSFeed = new RSS();

支持类是:

public class RSSItem
{
    public string Title { get; set; }
    public string Link { get; set; }
    public string Description { get; set; }
    public DateTime PubDate { get; set; }
}
public class RSS
{
    public string FeedURL { get; set; }
    public List<RSSItem> Feed = new  List<RSSItem>();

}

非常感谢任何帮助。我想知道我是否真的能够做我想要做的事情或完全以错误的方式做到这一点。

2 个答案:

答案 0 :(得分:0)

在上面的示例中,.Feed是一个空的RSSItem列表。你的代码:

@ViewBag.RSSFeeds.Feed[0].Title

如果尝试从(空)列表中的第一个Feed获取标题,这就是您获得空引用错误的原因。

您需要检查部分内容,以确保在使用Feed之前存在Feed。

@if (ViewBag.RSSFeeds != null && ViewBag.RSSFeeds.Feed.Count() > 0)

如果您使用ViewBag,则需要在使用它的每个页面加载上填充它 - 如果只有2页可能不是问题。也许最好使用Session来存储你的RSSFeeds?

 Session["RSSFeeds"] = RSSFeeds;

获取

if (Session["RSSFeeds"] != null)
    return (RSSFeeds)Session["RSSFeeds"];
else
    return null;

答案 1 :(得分:0)

我还无法发表评论,但您使用RenderPartial的输入是否正确?在MSDN上,没有采用ViewDataDictionary和另外一个对象的方法。