2010-07-27 5 views
3

Dans cette ligne de coderéférence d'objet non définie à une instance d'un objet

<% var tmp = int.Parse(ViewData["numOfGroups"].ToString()); %> 

J'ai erreur: Object reference not set to an instance of an object. Comment convertir correctement

ViewData["numOfGroups"] à int?

+0

Copie possible de [Qu'est-ce qu'une exception NullReferenceException, et comment la réparer?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix -it) –

Répondre

5

Vous devez vous assurer que votre action du contrôleur est cette variable:

public ActionResult Index() 
{ 
    ViewData["numOfGroups"] = "15"; 
    return View(); 
} 

Une fois que vous avez fait cela, vous ne devrait plus obtenir un NullReferenceException et votre code devrait fonctionner.

Bien sûr, comme je l'ai déjà écrit plusieurs fois ici, vous devriez préférer la vue fortement typée au lieu de ViewData. Aussi, vous devez taper les propriétés de votre modèle en conséquence. Ce n'est pas la responsabilité de la vue d'analyser les chaînes. Alors:

public ActionResult Index() 
{ 
    var model = new MyModel 
    { 
     NumOfGroups = 15 
    }; 
    return View(model); 
} 

Et à votre avis:

<% var tmp = Model.NumOfGroups; %> 

En passant, cela devrait également être évité que j'ai le sentiment que vous déclarez des variables dans votre point de vue qui signifie que vous avez l'intention de les utiliser. Les vues ne servent pas à déclarer des variables et à écrire du code C#. Ils sont des balisages.

0

Semble ViewData["numOfGroups"] est null. Il est tout à fait possible que le problème ne soit pas dans la conversion elle-même, mais dans ViewData["numOfGroups"].ToString().

1

Si l'erreur était liée à la conversion ViewData["numOfGroups"] en int alors vous obtiendriez FormatException. Vérifiez que vous transmettez réellement les données à la vue et qu'elle contient la clé numOfGroups.

0

Depuis le dictionnaire ViewData contient <string, object> que vous devez faire unboxing sur la valeur:

int tmp = (int)ViewData["numOfGroups"]; 

mais il faut vérifier si l'objet est nulle première ou Surround par try/catch s'il y a une chance de la conversion ne fonctionnera pas .. ... ou utilisez TryParse() qui retourne booléen si la conversion a réussi ou non.

+0

votre code ne compilera pas Je suppose que vous vouliez dire (int) ViewData ["numOfGroups"] qui sera cependant toujours une exception de référence nulle. L'exception null ref la plus plausible dans le code OP affiché est que ViewData ["NoOfGRoups"] est null. –

+0

édité, merci pour l'observation .... – TheBoyan

Questions connexes