2017-08-23 1 views
0

Je suis nouveau à MVC et je vais essayer d'élaborer mon problème avec soin. J'ai un contrôleur avec 2 méthodes d'action, dont une est une méthode POST:Chargement de la même vue avec les données publiées par l'utilisateur si ModelState.IsValid renvoie false

[AllowAnonymous] 
public ActionResult Register() 
{ 
    RegisterViewModel registerModel = new RegisterViewModel(); 
    //Some Code to populate dropdowns for user to select 
    return View(registerModel); 
} 

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Register(RegisterViewModel model) 
{ 
    try 
    { 
     if (ModelState.IsValid) 
     { 
      //insert data in tables 
      RedirectToAction("Register"); 
     } 
     AddErrors(result); 
    } 
    catch (Exception ex) 
    { 
     ModelState.AddModelError("", "Error Processing Your Request"); 
    } 

    // If ModelState.IsValid returns false show the form with posted data by user 
    return RedirectToAction("Register", model); 
} 

Maintenant, lorsque le formulaire est affiché toutes les données saisies par l'utilisateur ne persistent pas. Je veux afficher le même formulaire à l'utilisateur avec ses données affichées et remplir les détails manquants pour terminer l'inscription. Désolé, c'est une question très basique. Comment puis-je conserver les données sur la même vue?

+0

Si elle est invalide, alors vous utilisez 'return View (model);' pour retourner la vue et afficher les erreurs de validation (pas 'RedirectToAction (...)') –

+0

return RedirectToAction ("Enregistrer", modèle) appelle le même fonction encore – Musab

+0

J'ai aussi EditorTemplate qui charge sur la vue et quand je renvoie View (model); Ensuite, j'obtiens l'erreur comme ** L'élément ViewData qui a la clé 'EmploymentType' est de type 'System.Int32' mais doit être de type 'IEnumerable '. ** – LearningPal

Répondre

1

Première Modifier votre modèle avec DataAnnotations [Obligatoire] que vous ne voulez pas être vide comme:
[Obligatoire («Le nom ne peut être vide » ErrorMessage =)] Nom
chaîne publique {get; ensemble; }

Maintenant, éditez votre contrôleur quelque chose comme.

if (ModelState.IsValid) 
{ 
    //insert data in tables 
     RedirectToAction("Register"); 
} 
else 
{ 
return View(); 
} 
2

Au lieu de return RedirectToAction("Register", model); utilisation return View(model);.

Here est un joli blog expliquant les différences.