【问题标题】:How to determine if a profile data member has ever been set?如何确定是否曾经设置过配置文件数据成员?
【发布时间】:2010-07-08 18:08:16
【问题描述】:

我以前问过这个问题,但我正在恢复它,因为我没有得到满意的答复。

我有一个配置文件变量,当我加载它时,它被分配了默认值。我需要检查它是否曾经被分配过。通常我会使用 is null 比较,但这不起作用。

有人建议我使用看起来落后的 FindProfilesByUserName。不管这种方法不会起作用,因为它只会告诉我用户是否创建了任何个人资料,而不是针对我感兴趣的特定成员数据。(这似乎是倒退的,因为个人资料的全部目的是让访问当前的用户配置文件数据。这似乎是一个糟糕的设计,除非我遗漏了什么。)

我能看到的最后一个选项是为每个对象分配位以查看它们是否被弄脏或设置。除非需要,否则我不想这样做。

这里是 FindProfilesByUserName 示例:

ProfileInfoCollection profileInfo = ProfileManager.FindProfilesByUserName(ProfileAuthenticationOption.All, Membership.GetUser().UserName);
        if (profileInfo.Count > 0)
        {
            if (profileInfo[Membership.GetUser().UserName] != null)

我的最后一个想法是存储集合,因为我认为我已经阅读过它们可以为空。就我而言,我真的不需要收藏,但这可能是最简单的解决方案。期待建议。我觉得我在这件事上一定遗漏了一些明显的东西。

说清楚

这不起作用(如果 http.context.profile.mydata != null)

【问题讨论】:

标签: asp.net asp.net-membership asp.net-profiles


【解决方案1】:

好的,我很惊讶没有人遇到过这个问题:让我觉得我缺少一些基本的东西。我将为该组添加一个组和一个脏标志。如果有人可以提供另一种解决方案,我将给予答案。或者对象的脏标志..

【讨论】:

    【解决方案2】:

    只需设置一个代表null 的默认值。例如对于 int 字段,将默认值设置为 -1。

    在我看来,您所描述的要求是一种极端情况,无论如何使用上述策略很容易满足。

    我认为,您断言这是个人资料模型的疏忽或缺陷还为时过早。

    祝你好运。

    【讨论】:

    • 这是一个相当大的疏忽,因为它会在您想要存储的任何对象/类上强制使用非必要的模型。当然,有修复。
    猜你喜欢
    • 2019-12-31
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2011-09-29
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多