【问题标题】:how can I change the "get" and "set" on a Model Property?如何更改模型属性的“get”和“set”?
【发布时间】:2012-04-10 05:16:42
【问题描述】:

目前我有一个模型的 DateTime 属性。我正在使用 Telerik MVC 框架,但我使用的是 DateTime 属性,并且该属性的编辑器列是自动生成的,因此在我的视图或控制器中没有控制它的代码。在 Telerik 的网站上,有关于如何为日期时间选择器设置默认日期时间的说明,但该选择器不会在任何地方启动,因为它位于列中。问题是我想将 DateTime 设置为当前日期和时间(如果尚未指定)。目前,该模型的代码如下所示:

 public DateTime CreatedDate { get; set;}

我希望它更像这样:

public DateTime CreatedDate
        {
            get
            {
                if (QuestionID != 0)
                {
                    return this.CreatedDate;
                }
                else
                {
                    return DateTime.Now;
                }

            }
            set { CreatedDate = value; }
        }

这样,如果 ID 存在,它将返回为此问题存储的 DateTime。如果您正在创建一个新问题,它会获取当前的日期时间。

问题出在 Set 上。当我尝试加载屏幕时,设置 get 是 Stack Overflow。我真的不熟悉这种代码,所以我不知道如何使用它。

在我们没有使用模型之前,而是使用 JQuery 来获取 CreatedDate 的数据并将其设置为当前日期时间。问题是当您转到日期时间的“选择器”部分时,它会转到默认日期时间而不是当前日期时间。这就是为什么我想通过模型、视图或控制器来设置它,而不是通过 Jquery。

如果您能帮助我理解模型中的 Gets 和 Sets,请告诉我!

【问题讨论】:

    标签: model-view-controller model telerik-grid telerik-mvc datetimepicker


    【解决方案1】:

    您需要拥有在幕后使用的私有财产。

        private DateTime _createdDate;
        public DateTime CreatedDate
        {
            get
            {
                if (QuestionID != 0)
                {
                    return _createdDate;
                }
                else
                {
                    return DateTime.Now;
                }
    
            }
            set { _createdDate = value; }
        }
    

    您正在发生溢出,因为您当前正在执行类似的操作:

    CreatedDate = 1/1/2012;
    ...which then calls
    CreatedDate = 1/1/2012;
    ...which then calls
    CreatedDate = 1/1/2012
    ..You get the point (it is continuously setting itself until the stack overflows)
    

    自动实现的属性 ({get;set;}) 实际上在幕后使用了一个私有变量。如果您查看 IL,那么您会发现它实际上将简单的 {get;set;} 分解为基于生成的私有变量的 getter/setter。它们只是一种“编译器魔法”,用于减少当 getter/setter 中没有真正的逻辑时必须创建私有变量的样板代码。如果你有逻辑,那么你需要自己实现这个私有变量。

    【讨论】:

    • 非常感谢贾斯汀!你的解决方案奏效了。我注意到在其他屏幕中使用了私有变量,但我不明白如何或为什么。你解释得很好。
    • 另外,我对编程和调试有点陌生。找到正在运行的程序的“内部逻辑”以便我可以看到正在发生的事情的最佳方法是什么?现在,我所做的只是设置断点并逐步执行程序。我可以逐步完成获取和设置的逻辑吗?
    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多