2012-02-09 1 views
2

Im en utilisant un MODELVIEW afin de créer un DropDownList:DropDownListFor Référence d'objet non définie à une instance d'un objet

MODELVIEW

public class CreateSubjectModel 
{ 
    public Subject Subject { get; set; } 
    public IEnumerable<SelectListItem> Careers { get; set; } 
} 

L'action [HttpGet]

public ActionResult Create() 
    { 
     CreateSubjectModel model = new CreateSubjectModel(); 

     List<SelectListItem> careerList = new List<SelectListItem>(); 
     foreach (var career in _careerManager.GetCareers()) 
      careerList.Add(new SelectListItem() { Text = career.Institution + " - " +  career.Name, Value = career.id.ToString() });  

     model.Careers = careerList; 

     return View(model); 
    } 

Le Action [HttpPost]

public ActionResult Create(CreateSubjectModel createSubjectModel) 
     { 
      try 
      { 
       _subjectManager.SaveSubject(createSubjectModel.Subject); 
       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(); 
      } 
     } 

Et la vue:

<div class="editor-field"> 
     @Html.DropDownListFor(model => model.Careers, Model.Careers) 
     @Html.ValidationMessageFor(model => model.Careers) 
    </div> 

Le problème est que quand je frappe Submit J'ai ce problème:

**Object reference not set to an instance of an object.** 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 

Source Error: 

Line 47:   </div> 
Line 48:   <div class="editor-field"> 
Line 49:    @Html.DropDownListFor(model => model.Careers, Model.Careers) 
Line 50:    @Html.ValidationMessageFor(model => model.Careers) 
Line 51:   </div> 

Je regarde partout et je ne peux pas trouver un exemple de travail ou d'un tutoriel qui me aide. Espérons que vous pouvez faire ...

+2

_Ne pas avaler toutes les exceptions_ – SLaks

+0

Les exceptions peuvent, en effet, être de délicieuses friandises, mais vous devriez au moins * les regarder * avant de les avaler entières. –

+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

3

Probablement vous avez une exception dans votre code dans le bloc catch vous renvoyez vue sans modèle. Et dans ce cas sur la vue vous avez une exception, car le modèle est nul.

try 
{ 
    _subjectManager.SaveSubject(createSubjectModel.Subject); 
    return RedirectToAction("Index"); 
} 
catch 
{ 
    return View(); // problem here.. return View with model too. 
} 
0

Deux choses:

d'abord, vous ne créez pas des contrôles qui peupleront votre modèle Subject, de sorte que est nul dans votre action Create. Vous n'avez pas posté ce modèle, donc je ne peux pas vous dire quelle devrait être la syntaxe du rasoir.

Deuxième: Vous liez la création d'une liste déroulante de la liste elle-même:

@Html.DropDownListFor(model => model.Careers, Model.Careers) 

changement que vous modélisez à:

public class CreateSubjectModel 
{ 
    public Subject Subject { get; set; } 
    public IEnumerable<SelectListItem> Careers { get; set; } 
    public int SelectedCareerId { get; set; } 
} 

et votre vue:

@Html.DropDownListFor(model => model.SelectedCareerId, Model.Careers) 

Cette nouvelle propriété aura la valeur sélectionnée dans votre action Create.

Questions connexes