[英]ASP.NET MVC 2 filling ViewModel data
正確地說:如何將Dictionary<String, String>
映射到ViewModel? ViewModel包含與Dictionary鍵相同名稱的屬性。
為了提供更多信息,該程序讀取數據庫記錄,並在Dictionary<String, String>
返回該記錄的所有值。 我只想向用戶顯示這些字段的20-30,而其他處理則在其他字段的幕后進行。 我制作了一個ViewModel並強烈鍵入了視圖。 我可以手動將Dictionary<String, String>
中的屬性分配給ViewModel屬性,但是這似乎是填充ViewModel的錯誤方法。
然后,我嘗試使用反射來填充字段,但是這似乎又是錯誤的方法。
foreach (PropertyInfo propertyInfo in this.GetType().GetProperties())
{
if (propertyInfo.PropertyType.Name.Equals("String"))
{
if (myClass.FieldValues.Keys.Contains(propertyInfo.Name))
{
propertyInfo.SetValue(this, myClass.FieldValues[propertyInfo.Name], null);
}
}
}
再說一遍,有沒有一種方法可以使用Dictionary<String, String>
填充我的ViewModel Dictionary<String, String>
其中Key值與ViewModel屬性值相同?
如果我要設置ORM層(實體,Linq-to-Sql)以返回強類型對象。 這為您提供了類型安全得多的整體解決方案。
如果您對Dictionary<string,string>
感到Dictionary<string,string>
那么可以使用以下三種選擇:
反思-您已經做到了,這很簡單。
表情/思考。 您可以編譯一次將其轉換為lambda的表達式,然后簡單地將其作為方法調用。 這樣的好處是運行時比反射更快。 但是,除非您每秒進行數千次此類操作,否則獲得的性能值得您付出額外的精力。
dynamic
/ ExpandoObject
。 這有點實驗性,涉及到圍繞動態對象的強類型包裝器。
public class ViewModel {
ExpandoObject m_Dynamic;
public string FirstName {return m_Dynamic.FirstName ; }
public string LastName {return m_Dynamic.LastName; }
public ExpandoObject DynamicObject {get{return m_Dynamic;}}
}
// In the data mapping layer
ViewModel vm = new ViewModel();
Dictionary<string,string> data = new Dictionary<string,string>{{"FirstName", "Igor"}, {"LastName", "Zevaka"}};
foreach(var kv in data) {
((IDictionary<string,object>)vm.DynamicObject)[kv.Key] = kv.Value;
}
哎呀,您甚至可以不必理會dynamic
並將屬性直接轉到字典:
public class ViewModel {
Dictionary<string,string> m_Dynamic;
public string FirstName {return m_Dynamic["FirstName"]; }
public string LastName {return m_Dynamic["LastName"]; }
public Dictionary<string,string> DynamicObject {get {return m_Dynamic;}}
}
// In the data mapping layer
ViewModel vm = new ViewModel();
Dictionary<string,string> data = new Dictionary<string,string>{{"FirstName", "Igor"}, {"LastName", "Zevaka"}};
foreach(var kv in data) {
vm.DynamicObject[kv.Key] = kv.Value;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.