egu*_*iar 5 model-view-controller model datetimepicker telerik-mvc telerik-grid
目前我有一个模型的 DateTime 属性。我正在使用 Telerik MVC 框架,但我使用的是 DateTime 属性,并且此属性的编辑器列是自动生成的,因此在我的视图或控制器中没有控制它的代码。在 Telerik 的网站上,有关于如何为日期时间选择器设置默认日期时间的说明,但此选择器并未在任何地方启动,因为它位于一列中。问题是我想将 DateTime 设置为当前日期和时间(如果尚未指定)。目前,模型的代码如下所示:
public DateTime CreatedDate { get; set;}
Run Code Online (Sandbox Code Playgroud)
我希望它做更多这样的事情:
public DateTime CreatedDate
{
get
{
if (QuestionID != 0)
{
return this.CreatedDate;
}
else
{
return DateTime.Now;
}
}
set { CreatedDate = value; }
}
Run Code Online (Sandbox Code Playgroud)
这样,如果 ID 存在,它将返回为此问题存储的日期时间。如果您正在创建一个新问题,它将获取当前日期时间。
问题出在 Set 上。当我尝试加载屏幕时,将 get 设置为 Stack Overflow。我真的不熟悉这种代码,所以我不知道如何使用它。
之前我们不使用模型,而是使用 JQuery 获取 CreatedDate 的数据并将其设置为当前日期时间。问题是当您转到日期时间的“选择器”部分时,它会转到默认日期时间而不是当前日期时间。这就是为什么我想通过模型、视图或控制器而不是使用 Jquery 来设置它的原因。
如果您能帮助我理解模型中的 Gets 和 Sets,请告诉我!
您需要拥有在幕后使用的私有财产。
private DateTime _createdDate;
public DateTime CreatedDate
{
get
{
if (QuestionID != 0)
{
return _createdDate;
}
else
{
return DateTime.Now;
}
}
set { _createdDate = value; }
}
Run Code Online (Sandbox Code Playgroud)
您正在溢出,因为您目前正在做这样的事情:
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)
Run Code Online (Sandbox Code Playgroud)
自动实现的属性 ( {get;set;}) 实际上在幕后使用了一个私有变量。如果您查看 IL,您会发现它实际上{get;set;}根据生成的私有变量将简单的方法分解为 getter/setter。它们只是一种“编译器魔法”,可以减少在 getter/setter 中没有真正逻辑时必须创建私有变量的样板代码。如果你有逻辑,那么你需要自己实现这个私有变量。