2009-03-18 13 views
5

हाय मैं शेयरपॉइंट नेमस्पेस का उपयोग कर विकास कर रहा हूं और जब मैं सूची आइटम से शीर्षक फ़ील्ड पुनर्प्राप्त करने का प्रयास करता हूं तो मैं निम्न त्रुटि में भाग गया।SharePoint ListItem त्रुटि: "मान अपेक्षित सीमा के भीतर नहीं आता है"

Value does not fall within the expected range

मुझे पता है कि फ़ील्ड मौजूद है क्योंकि मैंने सभी फ़ील्ड मुद्रित किए हैं।

string value = (string)listItem[listItem.Fields["Title"].Id]; 
Console.WriteLine("Title = " + value); 

अद्यतन: किस हद तक देखें कि सूची आइटम को पुन: प्राप्त करने के लिए इस्तेमाल किया गया था एक भूमिका क्या में क्षेत्रों में उपलब्ध हो जाएगा चल जाता है करने के लिए? इस कोड को एक ही अपवाद के साथ विफल रहता है:

SPListItemCollection items = list.GetItems(list.DefaultView); 
foreach (SPListItem listItem in items) 
{ 
    try 
    { 
    Console.WriteLine("Title = " + listItem.Title); 
    } 
    catch (Exception e) 
    { 
    Console.WriteLine("Exception: " + e.Message); 
    } 
} 

दोनों ही मामलों में list.DefaultView संपत्ति सूची आइटम को पुन: प्राप्त करने के लिए इस्तेमाल किया गया था।

उत्तर

1

"शीर्षक" फ़ील्ड सूची में मौजूद हो सकता है लेकिन डिफ़ॉल्ट दृश्य में नहीं। क्या आप यह कर सकते हैं?

foreach (var item in list.Items) Console.WriteLine((string)item["Title"]); 
+0

आइटम ["शीर्षक"] का संदर्भ देने का कोई भी प्रयास उस अपवाद को फेंकता है। – Ries

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है –

0

मैं पता नहीं क्यों, लेकिन मैं एक डेटास्रोत के रूप में SPListItemCollection से एक GridView बनाया। मुझे एक ही त्रुटि थी। लेकिन मैं संग्रह से DataTable प्राप्त करने की कोशिश:

SPListItemCollection res = da.getAllItems(); 
DataTable dt = res.GetDataTable(); 

और फिर मैं मेरे GridView में उस क्षेत्र में शामिल है कि सूची आइटम के शीर्षक में "LinkTitle" कहा जाता है देखते हैं। इसलिए, मैंने अपना कोड दोबारा लिखा: SPListItemCollection res = da.getAllItems();

gridView.DataSource = res.Cast<SPListItem>().Select(a=> a["LinkTitle"]); 
gridView.DataBind(); 

और सब कुछ ठीक काम करता है :)

0

"शीर्षक" फ़ील्ड (डिफ़ॉल्ट रूप से) डिफ़ॉल्ट दृश्य में उपलब्ध नहीं है। यदि आप दृश्य सेटिंग्स पृष्ठ पर एक नज़र डालते हैं, तो शीर्षक की जांच की जाती है, लेकिन इसे "संपादन मेनू वाले आइटम से लिंक" के रूप में लेबल किया जाता है।

दृश्य द्वारा खुलासा क्षेत्र वास्तव में "लिंकटिटल" नाम दिया गया है (आप list.DefaultView.ViewFields की गणना करके इसकी पुष्टि कर सकते हैं)।

आपकी समस्या का समाधान item.Title को item["LinkTitle"].ToString() के साथ प्रतिस्थापित करने के लिए है।

1

मैं अगर क्षेत्र SPQuery.ViewFields में अनुरोध नहीं किया गया था की तरह

if (item.Fields.ContainsField("Last_x0020_Modified")) 
{ 
    if (query.ViewFields.Contains("Last_x0020_Modified")) 
    ... 

बी/सी कुछ सुझाव देंगे, तो आप शायद यह नहीं मिल सकता है (अपवाद बनाया क्षेत्र, आईडी क्षेत्र शामिल हैं)

5

मुझे नहीं पता कि आपकी त्रुटि हल हो गई है या नहीं। लेकिन मुझे एक ही मुद्दे का सामना करना पड़ रहा था और मुझे समस्या का समाधान मिला। >
केंद्रीय व्यवस्थापन> अनुप्रयोग प्रबंधन वेब अनुप्रयोग
प्रबंधित प्रयोग में वेब अनुप्रयोग चुनते हैं और:
"सामान्य सेटिंग> संसाधन थ्रॉटलिंग" रिबन के माध्यम से

आप को तय करना है।

उस स्क्रॉल में और "List View Lookup Threshold" के लिए देखो, डिफ़ॉल्ट मान से 8 त्रुटि समाप्त होने तक मान बढ़ाएं।

Reference Link

+1

मुझे यह बहुत समस्या थी। मैंने प्रमाणित किया था कि मेरे क्षेत्र के नाम सही थे। साथ ही, ऐसा लगता है कि माइक्रोसॉफ्ट ने इसका डिफ़ॉल्ट मान 8 से 12 तक बदल दिया है। मेरे विकास वातावरण में 12 था, लेकिन स्टेजिंग वातावरण में 8 समस्याएं उत्पन्न हुईं। सेटिंग बदलने के लिए मुझे आईआईएस में ऐप पूल रीसेट करना पड़ा। –

1

मैं इस मुद्दे था, क्योंकि स्तंभ डिफ़ॉल्ट दृश्य का हिस्सा नहीं था। दृश्य पर भरोसा करने के बजाय, SPListItemCollection बनाते समय सीधे विशिष्ट कॉलम के लिए क्वेरी करें।

SPList cityList = web.Lists[cityListName]; 
    SPListItemCollection items = cityList.GetItems("Title","LocCode"); 
    foreach (SPListItem item in items) 
    { 
      cityName = item["Title"].ToString().Trim(); 
      cityCode = item["LocCode"].ToString().Trim(); 
    } 
संबंधित मुद्दे