有没有办法告诉哪个属性值来自哪个?

时间:2010-07-14 00:55:39

标签: c# asp.net

我知道它很长,但是......只需要尝试。

例如,如果我使用SelectedDate属性创建了一个DateTime控件,如果在服务器端代码中将它设置为Person.DateOfBirth,则在DateTime控件中有任何方法可以告诉SelectedDate来自Person.DateOfBirth ?

5 个答案:

答案 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.
}

如果我需要详细说明,请告诉我。