2011-08-11 91 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