2010-09-14 2 views
-1

J'ai la méthode d'assistance suivante qui renvoie la valeur d'un champ.ArgumentExecption inattendue lors de l'accès à une valeur de champ dans un élément 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; 
     } 

Cependant, pour un champ (normal champ Choix) Je reçois un ArgumentExecption sur cette ligne

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

J'utilise

SPListItem item = list.GetItemById(itemId); 

Pour obtenir l'article.

Je n'arrive pas à trouver pourquoi je reçois l'exception lorsque je vérifie si le champ existe? Toutes les idées pour lesquelles je reçois cette exception pour un seul champ.


Mise à jour.

Lors du débogage

L'appel à GetField() retourne l'objet de champ correct. Field.InternalName contient le nom interne correct du champ Si j'essaie d'accéder à la valeur à l'aide de l'élément ["nom interne du champ"], il lance toujours et exception pour seulement ce champ.

+0

Très curieux. Je suis spitballing, mais quelques autres choses à essayer. 1) Et si vous essayiez d'accéder au terrain par son guid? ex: 'item [field.Id]'. 2) Et si vous parcouriez tous les champs de 'item' par index? ex 'item [0]', ''item [1]' ... juste pour voir ce qui est facilement disponible? – CBono

+0

Je n'avais pas pensé à essayer l'approche Guid, je vais lui donner un test et poster le feed back, Merci –

+0

pas de chance sur l'approche Guid, recréé la liste à partir de zéro et il a résolu le problème. –

Répondre

1

Parfois, des choses étranges se produisent et nous n'avons pas de réponse logique à ces questions. Essayez en supprimant la liste, puis en créant à nouveau la liste à partir de zéro. N'essayez PAS de l'enregistrer comme modèle et N'ESSAYEZ PAS de créer la liste à partir de ce modèle.

Une raison possible d'un tel type de message est que la sécurité/les permissions ne permettent pas de manipuler ce champ/colonne. Une autre raison possible de ce type de message indésirable/inattendu est que lorsque le champ a été créé pour la première fois, son type de données était différent et plus tard il a été changé en choix. Techniquement, il ne devrait pas y avoir de problème, mais parfois nous sommes confrontés à un comportement étrange.

1

Avez-vous essayé le débogage? Les questions que vous devez répondre (parce que nous ne pouvons pas):

  • Est-field une valeur valide ou nulle, après l'appel à GetField()?
  • Si field n'est pas nul, que retourne field.InternalName?
  • Si field.InternalName renvoie une valeur valide, pouvez-vous y accéder en codant en dur cette valeur dans l'indexeur? à savoir item["fieldInternalName"]

trouver cette information peut vous aider à résoudre le problème vous-même, mais si elle ne correspond pas à votre poste de sorte que la communauté a une meilleure chance de vous aider.

+0

Merci pour le post, je suis mise à jour ma question. –

0

Je l'ai éprouvé plusieurs fois. La raison en est que si vous êtes connecté en tant que compte non administrateur (compte système), le seuil de recherche par affichage liste par défaut pour l'utilisateur est de 8 pour les colonnes de recherche. Par exemple, pour l'affichage par défaut, l'utilisateur peut accéder aux 8 champs de recherche uniquement. Si vous modifiez List Throttling à> 8, il sera résolu. Mais augmenter cela va dégrader la performance.

Aller à Central Admin >> Gérer les applications Web >> Sélectionnez l'application Web >> Paramètres généraux >> Dropdown ressources >> Modifier la Throttling "Liste de recherche Seuil" à plus de 8

Merci, - Nom de code "Santosh"

Questions connexes