2010-03-04 4 views
0

J'ai un viewmodel qui contient un produit et SelectList de catégories. Lors de l'ajout d'un nouveau produit, si la validation échoue pour la liste déroulante des catégories, je reçois un message d'erreur ci-dessous.Validation de ViewModel throws exception

L'élément de modèle transmis au dictionnaire est de type 'AmericanAds.Model.Ad' mais ce dictionnaire nécessite un élément de modèle de type 'AmericanAds.Controllers.AdFormViewModel'.

Voici le contrôleur pour créer une action.

public ActionResult Create() 
    { 
     AdFormViewModel data = new AdFormViewModel(
      null, 
      new SelectList(_repository.CategoryList().ToList(), "CategoryId", "CategoryName") 
      ); 

     return View(data); 
    } 

    // 
    // POST: /Ad/Create 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(Ad ad) 
    { 
     if (ModelState.IsValid) 
     { 
      try 
      { 
       _repository.AddAd(ad); 

       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(ad); 
      } 
     } 
     else 
     { 
      return View(ad); 
     } 
    } 

Que manque-t-il?

Comme vous pouvez le constater, je suis très nouveau sur ASP.Net MVC.

Merci!

+0

Est-ce asp.net-mvc 2? Sinon, quel moteur de validation utilisez-vous? Pouvez-vous nous montrer un balisage de vue et l'action où cela échoue? –

+0

c'est mvc 1.0. Je vais ajouter du code au poste –

+0

Par curiosité, comment la validation peut-elle échouer pour une liste déroulante dans ce scénario? Est-ce que ça marche parfois et parfois échouer? Si oui, quelles sont les entrées à chaque fois? Est-ce qu'il échoue toujours? Si oui sur quelle ligne? –

Répondre

0

Il est parce que votre Create vue a besoin d'un modèle de type AdFormViewModel mais dans votre action Create (l'un avec l'attribut [AcceptVerbs(HttpVerbs.Post)]) vous retournez un modèle de type Ad (voir les lignes où il est dit return View(ad)).

Comme le dit le message d'exception; Il nécessite un AmericanAds.Controllers.AdFormViewModel mais vous envoyez un AmericanAds.Model.Ad.

Et non, je ne pense pas que cela ait quelque chose à voir avec la validation.

+0

Spot sur Cagdas, merci mon compatriote;) –

+0

@hhastekin, Vous êtes les bienvenus :) –

Questions connexes