我知道它很长,但是......只需要尝试。
例如,如果我使用SelectedDate属性创建了一个DateTime控件,如果在服务器端代码中将它设置为Person.DateOfBirth,则在DateTime控件中有任何方法可以告诉SelectedDate来自Person.DateOfBirth ?
答案 0 :(得分:1)
您要做的事情明显违反了Separation of Concerns Principle。 DateTime控件的工作是显示日期时间并允许用户更改它。它不应该知道DateTime的来源。
坦率地说,我很难想到为什么需要这个功能。表单是一个相当容易理解的UI范例。您加载表单,从模型中设置表单元素的值,让用户更改值,读取所有值,验证它们并更新模型。还有什么可以做的?
编辑对于此特定问题,您需要做的就是在日期时间控件上创建标记,例如ConvertToUTC
。设置为true时,它会将时间转换为UTC,否则,用户输入的值将保持不变。应该那么好又干净。
答案 1 :(得分:0)
一般情况下,没有。
如果有人倾向于在设置属性时检查调用堆栈应该是可能的,但这将是非常糟糕的形式,并指示潜在的问题。我说你试着以另一种方式解决你的问题。你在寻找什么结果?你想做什么?
答案 2 :(得分:0)
如果你想这样做,我必须同意丝滑。
但是,如果只是想为特定的类做这个,或者在这种情况下是一个控件,你当然可以创建自己的控件,继承你想要的任何控件,然后覆盖属性并修改setter来保存一些额外的信息。
但我猜你想要这样做......
答案 3 :(得分:0)
不确定这是否有效,但只是一个想法。
如果通过Func<>访问所选日期值set和get。委托,您将参数设置为目标。来自Func<>对象,您应该能够要求方法和目标。我自己没有试过这个,所以如果你试过的话,听听你的想法会很棒。
只是添加一个可能的例子:
Func<DateTime> _selectedDate = person.GetDateOfBirth();
所以稍后您可以要求提供
等来源if (_selectedDate.Target.GetType() == typeof(Person))
doSomething()
答案 4 :(得分:0)
我猜你需要得到setter客户端。您可以将“rel”属性设置为setter,然后获取客户端的“rel”属性(例如jQuery)。
// server-side.
DateTimeControl.Attributes["rel"] = "Person.DateOfBirth";
// client-side (jQuery).
if $('#DateTimeControl').attr('rel') == 'Person.DateOfBirth' {
// logic here.
}
如果我需要详细说明,请告诉我。