2009-08-03 32 views
0

使用jQuery提交值回一個asp.net網絡表單。我有一些代碼適用於將張貼的表單值粘貼到我的對象中,基本上它將表單值轉換爲我的類中每個屬性的正確類型。使用泛型處理asp.net形式請求變量爲業務對象

if (Request.Form.HasKeys()) 
{ 
    foreach (var key in Request.Form.AllKeys) 
    { 
     PropertyInfo itemProperty = _CmsItem.GetType().GetProperty(key, BindingFlags.Public | BindingFlags.Instance); 

     var value = Request.Form[key]; 
     if (itemProperty != null) 
     { 
      itemProperty.SetValue(_CmsItem, Convert.ChangeType(value, itemProperty.PropertyType), null); 
     } 
    } 
    // Doing some processing with my object 
} 

現在我已經就如何處理像MyKeys字符串= 123,13332,232323 和獲取到我的對象數組或列表運行陷入窘境。處理這種情況的最佳方法是什麼?

說明:我已經構建了頁面來處理常規表單帖子以及基於requestmode標記的$ ajax回調帖子,因此可以根據不同的情況重新使用頁面/或頁面的某些部分。

回答

1

解析在你上面給將只使用string.Split(...)格式列表的最簡單方法。

處理列表和對象從JavaScript到服務器的理想方法是使用JSON。這對大多數開發者來說是標準化和直觀的它具有使用通用API在ASP.NET中進行解析的額外好處。

在下面的例子中,我假定列表的值是逐字地「[123,13332,232323]」(沒有引號)。這會將該值轉換爲字符串數組。它使用JavaScriptSerializer class進行JSON解析。這個類需要你的項目引用System.Web.Extensions DLL,它是.NET 3.5框架的一部分,但並不總是默認包含在項目中。

using System.Web.Script.Serialization; 

[...]

if (Request.Form.HasKeys()) 
{ 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    foreach (var key in Request.Form.AllKeys) 
    { 
     var value = Request.Form[key]; 

     var list = serializer.Deserialize<string[]>(value); 

    } 
} 

我也只是與其它類型的(從僅僅string[]預留)測試此和Deserialize<T>()方法也將對象轉換爲int[]List<string>,和List<int>,所以它具有很強的動態性,並且不需要太多的努力來解析。

+0

在項目的這一點上,它需要明天做,我將與string.Split()去了。我將不得不在稍後訪問Json。 – Breadtruck 2009-08-03 03:00:44

相關問題