2011-08-11 93 views
0

我试图解决以下问题。我有一个存储数据的基类,让我们说一个人。 当创建一个新人时,只有部分细节将通过名字,姓氏等形式填写。当这个人被保存到数据库时,它也被分配一个ID。ASP.NET MVC - 动态类属性

Class Person 
    Public Property ID As Integer 
    Public Property Firstname As String 
    Public Property Lastname As String 
    Public Property Age As Integer 
    Public Property Location As String 
    Public Property Gender As String 

我也有一个叫做Task的类,它将控制一个人的其余属性的输入。 将任务分配给用户并要求他们完成Person类的单个属性。

Class Task 
    Public Property ID As Integer 
    Public Property ParentPerson As Person 
    Public Property AssignedUser As User 
    Public Property Attribute As String 

我不知道我怎样才能最好地实现打开一个任务,加载文本框的属性的能力,然后保存这回分贝?

在此先感谢!

+1

究竟是什么问题?我不明白你的理解,也不了解MVC,所以我不确定如何帮助你。看看你迄今为止所尝试的内容是有用的。 – DMulligan

+0

我一直在我的控制器中使用创建方法,这是非常标准的。我不确定如何渲染一个控件并以最佳方式将该数据保存回模型中。我不想为控制器中的每个可能的属性都写一个IF语句来传递给视图。即IF Task.Attribute =“Firstname”然后做一些事情传递给视图我必须写很多代码,因为会有很多属性。 我通常通过写Person.Firstname ='xx'来设置属性值。我如何将字符串Task.Attribute与Person类的'属性'联系起来? – Tom

回答

0

这听起来不像你的问题是与MVC,这听起来像你正在寻找一种方式来获得给定匹配字符串名称的属性名称。

我相信还有其他方法可以做到这一点,但我所知道的是反射。警告:我一直被告知反射速度缓慢,危险,除非必要,否则不应使用。

Type t = typeof(Person); 
FieldInfo f = t.getField(Task.Attribute); 
string oldValue = (string) f.GetValue(person); //gets old string given Person person 
f.SetValue(person, "xx"); // sets value of person.Take.Attribute to "xx" 

也许你的数据模型会更好这样

Class Person 
    Public Property ID As Integer 
    Public Property Attributes As List<PersonAttribute> 

Class PersonAttribute 
    Public Property Id as String //FirstName, LastName, etc 
    Public Property Value as String 
    Public Property DisplayName as String //if you need some label for html pages 

然后你可以只取PersonAttribute你想与id == Task.Attribute

一个地方查询见http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/或做一个搜索编辑器模板来查看如何将复杂列表绑定到mvc中的控制器。

+0

这不完全是一个MVC问题,但我使用MVC并需要达到预期的结果。 感谢您的反思,我现在正在阅读它,我想我将能够实现我想要的! 你已经注意到反射有一些缺点;是否有更好的方法可以设计我的应用程序,以便在没有反射的情况下实现相同的结果? 感谢您的建议! – Tom

+0

@Tom在我的回答中编辑了一条建议。 – DMulligan

+0

感谢您的额外建议。我实际上正在考虑这种方法,并已开始为每种方法做两个示例实现。 我的犹豫/未知与PersonAttribute类是我有一个报告元素必须完成的应用程序。我可以遍历属性集合来构建一个报告和列,但是我想它比一个具有定义列的普通数据集要花费更多的精力。 感谢您的帮助,我很感激有机会反弹想法关掉某人! – Tom