2010-01-28 5 views
0

J'ai actuellement le code suivant pour le POST pour éditer une note client.ASP.NET MVC: Validation du serveur et maintien des paramètres d'URL lors du renvoi de la vue

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult EditNote(Note note) 
    { 
     if (ValidateNote(note)) 
     { 
      _customerRepository.Save(note); 
      return RedirectToAction("Notes", "Customers", new { id = note.CustomerID.ToString() }); 
     } 
     else 
     { 
      var _customer = _customerRepository.GetCustomer(new Customer() { CustomerID = Convert.ToInt32(note.CustomerID) }); 
      var _notePriorities = _customerRepository.GetNotePriorities(new Paging(), new NotePriority() { NotePriorityActive = true }); 

      IEnumerable<SelectListItem> _selectNotePriorities = from c in _notePriorities 
                   select new SelectListItem 
                   { 
                    Text = c.NotePriorityName, 
                    Value = c.NotePriorityID.ToString() 
                   }; 

      var viewState = new GenericViewState 
      { 
       Customer = _customer, 
       SelectNotePriorities = _selectNotePriorities 
      }; 

      return View(viewState); 
     } 


    } 

Si la validation échoue, je le veux pour rendre la vue EditNote à nouveau, mais conserver les paramètres d'URL (de NoteID et CustomerID) pour quelque chose comme ceci: « http://localhost:63137/Customers/EditNote/?NoteID=7&CustomerID=28 »

Toutes les idées sur la façon d'y arriver?

Merci!

Répondre

0

Cette action est utilisée dans un message. Ne voudriez-vous pas que les params apparaissent dans le formulaire plutôt que dans l'url?

Si vous le voulez, je suppose que vous pourriez faire une RedirectToAction à l'action edit GET qui contient le noteId et customerId. Cela aurait pour effet de faire ressembler votre action comme ceci:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult EditNote(Note note) 
{ 
    if (ValidateNote(note)) 
    { 
     _customerRepository.Save(note); 
     return RedirectToAction("Notes", "Customers", new { id = note.CustomerID.ToString() }); 
    } 

    //It's failed, so do a redirect to action. The EditNote action here would point to the original edit note url. 
    return RedirectToAction("EditNote", "Customers", new { id = note.CustomerID.ToString() }); 
} 

L'avantage est que vous avez supprimé le besoin de dupliquer votre code qui obtient les clients, les notes et Wotnot. L'inconvénient (bien que je ne peux pas voir où il se fait ici) est que vous ne retournez pas les échecs de validation.

+0

Vous avez raison. Un pet de cerveau de mon côté. Merci de m'avoir donné l'étincelle dont j'avais besoin. Ça vient à travers le formulaire maintenant et ça marche. Merci! – Mike

+0

Excellent. Heureux de vous aider. –

Questions connexes