【问题标题】:PartialView used by 2 views accessing ViewModel data from each由 2 个视图使用的 PartialView 访问来自每个视图的 ViewModel 数据
【发布时间】:2015-06-10 16:38:59
【问题描述】:

我有 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>();

}

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

【问题讨论】:

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


    【解决方案1】:

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

    @ViewBag.RSSFeeds.Feed[0].Title
    

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

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

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

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

    设置

     Session["RSSFeeds"] = RSSFeeds;
    

    获取

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

    【讨论】:

    • 如果我在加载部分的主视图中进行调试,Model.RSSFeeds.Feed 有 10 个项目,这就是我感到惊讶的原因。
    • 也许 ViewDataDictionary 位正在丢失它。我从记忆中认为有一个重载,例如: Html.RenderPartial("Social", Model, new ViewDataDictionary(ViewData));
    【解决方案2】:

    我还不能发表评论,但是您用于 RenderPartial 的输入是否正确?在MSDN 上,没有任何方法可以使用 ViewDataDictionary 和另一个对象。

    【讨论】:

    猜你喜欢
    • 2011-10-26
    • 2015-12-22
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多