C# 有没有办法告诉你一个值来自哪个属性?

C# 有没有办法告诉你一个值来自哪个属性?,c#,asp.net,C#,Asp.net,我知道这是一个漫长的过程,但是。。。我只是想试试 例如,如果我创建了一个带有SelectedDate属性的DateTime控件,如果在服务器端代码中将其设置为Person.DateOfBirth,那么在DateTime控件中,是否有任何方法可以判断SelectedDate来自Person.DateOfBirth?通常不是,否 如果有人倾向于在设置属性时检查调用堆栈,那么这应该是可能的,但这将是非常糟糕的形式,并且表明存在潜在问题。我说你试着用另一种方式解决你的问题。你想要什么样的结果?你想做什么

我知道这是一个漫长的过程,但是。。。我只是想试试

例如,如果我创建了一个带有SelectedDate属性的DateTime控件,如果在服务器端代码中将其设置为Person.DateOfBirth,那么在DateTime控件中,是否有任何方法可以判断SelectedDate来自Person.DateOfBirth?

通常不是,否


如果有人倾向于在设置属性时检查调用堆栈,那么这应该是可能的,但这将是非常糟糕的形式,并且表明存在潜在问题。我说你试着用另一种方式解决你的问题。你想要什么样的结果?你想做什么?

如果你想大体上这样做,我必须同意丝琪

但是,如果只想对特定类或本例中的控件执行此操作,当然可以创建自己的控件,从所需的任何控件继承,然后重写属性并修改setter以保存一些额外信息


但我猜你一般都想这样做……

不确定这是否有效,但只是一个想法

如果通过Func委托访问选定的日期值set和get,则您将参数设置为目标值。从Func对象中,您应该能够请求方法和目标。我自己也没试过,所以如果你真的试过的话,我很高兴听到你的想法

再加上一个可能的例子:

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

你试图做的显然违反了。DateTime控件的任务是显示日期时间并允许用户更改它。它不应该知道日期时间从哪里来

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


编辑对于这个特殊问题,您需要做的就是在datetime控件上创建标志,例如
ConvertToUTC
。设置为true时,它会将时间转换为UTC,否则,用户输入的值将保持不变。这样应该很好很干净。

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


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

您为什么需要此功能?我正在处理一个国际化系统,在该系统中,日期将在datetime控件中转换为UTC,然后再转到后端。最近有越来越多的情况下,一些日期需要。。。不变的例如,一个人的出生日期,如果他/她输入6月15日,DateTime将使用时间组件00:00:00保存,因此当转换为UTC(-10)时,它将保存为14/06 14:00:00,因此当其他时区的人查看它时,它可能会转到其他日期。我所做的是使用自定义属性设置这些日期“粘的,并且当前正在控件中找到读取此内容的方法以停止日期时间转换。到目前为止,它们正在服务器端代码中手动转换回来,但我可以看到这会变成一场维护噩梦…我确实做到了,覆盖了自定义控件中的属性,但setter中的值没有显示它属于哪个对象,直到它在setter中只是一个DateTime。这是真的。。。由于不想改变电流,我可能走错路了framework@neo:更改现有框架比在这样的类型之间创建可怕的耦合要好得多。识别调用方并使其成为体系结构的依赖部分只会加剧维护问题,而不会缓解这些问题<代码>关注点分离是一种节省资源的方法,如果您能够修复当前框架以保持关注点分离,您将改进您的维护方案。是的,这就是当前的解决方案,即“粘滞日期”控件上的bool属性听起来好像包括更改所选日期对象类型或向控件添加新属性。。。但是谢谢!我会试试这个。我刚刚在问题的评论中解释了这个场景。不,我不会求助于呼叫堆栈:)
if (_selectedDate.Target.GetType() == typeof(Person))
   doSomething()
// server-side.    
DateTimeControl.Attributes["rel"] = "Person.DateOfBirth";

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