2010-07-14 39 views
2

我知道它很长一段时间,但是......只是不得不尝试。有什么办法可以告诉哪个属性的值来自?

例如,如果我使用SelectedDate属性创建DateTime控件,如果在服务器端代码中将其设置为Person.DateOfBirth,那么在DateTime控件中有任何方法可以告诉SelectedDate来自Person。出生日期?

+2

为什么你想要这个功能? – jfs 2010-07-14 00:58:54

+0

我正在处理一个国际化的系统,在日期时间控制中将日期转换为UTC,然后再转到后端。最近有越来越多的例子需要......不可变的日期。例如,一个人的出生日期,如果他/她输入6月15日,DateTime将以时间部分00:00:00保存,所以当它转换为UTC(-10)时,它将被保存为14/06 14:00:00所以当有人在不同的时区查看它时,它可能会变成不同的日期。 – 2010-07-15 02:18:07

+0

我所做的是使用自定义属性“sticky”设置这些日期,并且目前在控件中找到一种方法来停止日期时间转换。 截至目前,他们正在服务器端代码手动转换回来,但我可以看到这变成了维护噩梦... – 2010-07-15 02:23:03

回答

0

不一般,没有。

如果有人倾向于在设置属性时检查调用堆栈,但这应该是非常糟糕的形式,并且指出潜在的问题。我说你尝试以另一种方式解决你的问题。你在找什么结果?您想做什么?

+0

我刚才在问题的评论中解释了情况。 不,我不会诉诸调用堆栈:) – 2010-07-15 03:37:21

0

如果你想这样做,我必须同意柔滑。但是,如果只想为特定的类或此例中的控件执行此操作,则当然可以创建自己的控件,从您想要的任何控件继承,然后覆盖该属性并将该设置器修改为保存一些额外的信息。

,但我想你想一般做这个....

+0

我已经完成了,覆盖自定义控件中的属性,但setter中的值显示没有指示它属于哪个对象,到它在setter中的时候它只是一个DateTime。 – 2010-07-15 02:26:06

0

不知道这是否会工作,但只是一个想法。

如果通过Func <>委托访问所选的日期值set和get,并且您将参数设置为任何目标。从功能对象中,您应该能够询问方法和目标。我没有尝试过这个,所以如果你尝试过,听到你的想法会很棒。

只需添加到这个有可能的例子:

Func<DateTime> _selectedDate = person.GetDateOfBirth(); 

所以以后你可以索要源,如

if (_selectedDate.Target.GetType() == typeof(Person)) 
    doSomething() 
+0

听起来像它包括更改所选的日期对象类型或向控件添加新属性......但谢谢!我会试试这个。 – 2010-07-15 03:32:50

1

你正在尝试做显然违反Separation of Concerns Principle。 DateTime控件的作用是显示日期时间并允许用户更改它。它不应该知道DateTime来自哪里。

非常坦率地说,我很难想出为什么需要这个功能。表单是一个相当好理解的UI范例。您可以加载表单,从模型中设置表单元素的值,让用户更改值,读取所有值,验证它们并更新模型。还有什么可以做到的?

编辑对于这个特定的问题,所有你需要做的就是在你的日期时间控件上创建标志,比如ConvertToUTC。设置为true时,会将时间转换为UTC,如果不是,则用户输入的值将保持不变。应该很好,很干净。

+0

这是真的......我可能因为不想改变当前框架而错误了方向 – 2010-07-15 03:29:55

+0

@neo:改变现有框架比在这样的类型之间创建可怕的耦合更好。识别呼叫者并将其作为架构的依赖部分将只会增加您的维护问题,而不会减轻维护问题。 “关注分离”是一种节约的优势,如果您可以**修复**当前的框架以保持关注点分离,则将改善您的维护方案。 – jrista 2010-07-15 04:01:41

+0

是的,这就是目前的解决方案,控件上的“StickyDate”布尔属性 – 2010-07-15 05:01:01

0

我猜你需要得到setter客户端。您可以将“rel”属性设置为setter,然后获取“rel”属性客户端(例如jQuery)。

// server-side.  
DateTimeControl.Attributes["rel"] = "Person.DateOfBirth"; 

// client-side (jQuery). 
if $('#DateTimeControl').attr('rel') == 'Person.DateOfBirth' { 
    // logic here. 
} 

让我知道是否需要详细说明 - 谢谢。

相关问题