gpt4 book ai didi

model-view-controller - 如何更改模型属性上的 "get"和 "set"?

转载 作者:行者123 更新时间:2023-12-04 08:24:00 25 4
gpt4 key购买 nike

目前我有一个模型的 DateTime 属性。我正在使用 Telerik MVC 框架,但我使用的是 DateTime 属性,并且该属性的编辑器列是自动生成的,因此在我的 View 或 Controller 中没有控制它的代码。在 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 的数据并将其设置为当前日期时间。问题是当您转到日期时间的“选择器”部分时,它会转到默认日期时间而不是当前日期时间。这就是为什么我想通过模型、 View 或 Controller 来设置它,而不是使用 Jquery。

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

最佳答案

您需要拥有在幕后使用的私有(private)属性(property)。

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

关于model-view-controller - 如何更改模型属性上的 "get"和 "set"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9876587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com