簡體   English   中英

ASP.NET MVC 2填充ViewModel數據

[英]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>那么可以使用以下三種選擇:

  1. 反思-您已經做到了,這很簡單。

  2. 表情/思考。 您可以編譯一次將其轉換為lambda的表達式,然后簡單地將其作為方法調用。 這樣的好處是運行時比反射更快。 但是,除非您每秒進行數千次此類操作,否則獲得的性能值得您付出額外的精力。

  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM