2010-09-14 64 views
-1

我有以下幫助器方法,它返回字段中的值。訪問SPListItem中的字段值時出現意外的參數錯誤

public static string GetValueFrom(SPListItem item, string fieldName) 
     { 
      string value = string.Empty; 
      if (item.Fields.ContainsField(fieldName)) 
      { 
       SPField field = item.Fields.GetField(fieldName); 

       if (item[field.InternalName] != null) 
       { 
        value = item[field.InternalName].ToString(); 
       } 
      } 
      return value; 
     } 

然而,對於一個場(正常選擇欄)我在此行

if (item[field.InternalName] != null) 

得到一個ArgumentExecption我使用

SPListItem item = list.GetItemById(itemId); 

爲了獲得該項目。

我無法找到爲什麼當我檢查字段是否存在時,我得到異常? 任何想法,爲什麼我只有一個領域得到這個例外。


更新。

調試時

對GetField()的調用返回正確的字段對象。 Field.InternalName包含字段的正確內部名稱 如果我嘗試使用item [「字段的內部名稱」]訪問該值,它仍然會拋出並且只有這一個字段出現異常。

+0

非常好奇。我嘔吐,但還有其他一些事情要嘗試。 1)如果您嘗試通過Guid訪問該字段,該怎麼辦?例如:'item [field.Id]'。 2)如果你通過索引遍歷'item'的所有​​字段? ex'item [0]','item [1]'...只是爲了看看什麼是可用的? – CBono 2010-09-15 12:48:04

+0

我沒有想過試用Guid方法,我會給它一個測試併發布反饋,謝謝 – 2010-09-15 14:09:32

+0

Guid方法沒有運氣,重新從零開始重新列表並解決了問題。 – 2010-09-15 15:16:47

回答

1

有時會發生奇怪的事情,我們對這些問題沒有合理的答案。嘗試刪除列表,然後再次從頭開始創建列表。不要試圖將其保存爲模板,也不要嘗試從該模板創建列表。

這種類型的醜陋消息的一個可能的原因是安全/權限不允許操縱該字段/列。

這種類型的不需要的/意外的消息的另一個可能的原因是,當該字段是第一次創建時,其數據類型是不同的,後來改爲選擇。從技術上講,這樣做應該沒有問題,但有時我們會面對奇怪的行爲。

1

你試過調試嗎?問題你應該回答的(因爲我們不能):

  • field一個有效的值,或空,則調用GetField()後?
  • 如果field不爲空,field.InternalName實際返回的是什麼?
  • 如果field.InternalName返回一個有效值,您可以通過硬編碼索引器中的值來訪問它嗎?即item["fieldInternalName"]

找到這些信息可能會幫助您自己解決問題,但是如果它沒有將其添加到您的帖子中,以便社區有更好的幫助您的機會。

+0

感謝您的帖子,我正在更新我的問題。 – 2010-09-15 08:52:53

0

我確實經歷過這麼多次。原因是,如果您以非管理員帳戶(系統帳戶)身份登錄,則用戶的默認列表視圖查找閾值爲8,以便查找列。即對於默認視圖,用戶只能訪問8個查找字段。如果您將List Throttling更改爲> 8,它將被解決。但增加這將會降低性能。

轉到中央管理>>管理Web應用程序>>選擇Web應用程序>>常規設置下拉>>資源限制>>更改「列表視圖查詢閾值」超過800

謝謝, - 代號「Santosh」