2010-11-19 6 views
0

Ma calvitie croît plus rapidement qu'elle ne devrait l'être. J'ai d'abord posté this question il y a quelques jours. Je connais maintenant le problème et l'ai fonctionné ... en quelque sorte. Un autre problème est apparu à sa place. Pour résoudre le problème précédent, j'ai créé manuellement le nom requestedDays[{0}].DateOfLeave{0} était un Guid. Cela a permis à mon contrôleur de recevoir correctement les valeurs < de liste.Form Action Affichage null

En utilisant this article's method, le nom généré est requestedDays[{0}].DayRequested.DateOfLeave que mon contrôleur ne reçoit pas correctement car le nom contient la classe, DayRequested.DateOfLeave. J'ai essayé de trouver des solutions de rechange à la génération manuelle, mais rien de ce que j'ai essayé ne fonctionne jusqu'à maintenant. You can see my validation method here. Je connais le second part of Sanderson's article on validation cependant, il est assez difficile de valider quelque chose qui n'est pas passé dans la méthode.

Ceci est mon ViewModel que j'utilise dans ma vue partielle.

public class LeaveRequestRow 
{ 
    public LeaveRequestRow(DayRequested dayRequested, List<SelectListItem> leaveRequestType) 
    { 
     this.DayRequested = dayRequested; 
     this.LeaveRequestType = leaveRequestType; 
    } 

    public List<SelectListItem> LeaveRequestType { set; get; } 
    public DayRequested DayRequested { set; get; } 
} 

Est-ce que quelqu'un a des idées sur la façon de procéder? Dois-je convertir mon menu déroulant en un contrôle de construction jQuery et arrêter d'utiliser ViewModel?

+0

Je pense que le code fourni avec l'article que vous avez lié pourrait être buggé. –

Répondre

0

J'ai résolu cela, mais pas aussi élégamment que je l'avais espéré. Tous les TextBoxFor ont dû être remplacés par TextBox avec les modifications supplémentaires nécessaires pour ce faire. Les noms étaient alors correctement générés et je pouvais passer à autre chose. Cela a brisé la possibilité pour le message de validation d'apparaître à côté du champ, bien que ValidationSummary fonctionne toujours. Je vais travailler sur la réparation de cela plus tard et des échantillons de code postal et une solution sur mon site Web.

0

Les arguments de contrôleur 1-N de liaison de types complexes peuvent être difficiles. Vos exemples de code ne sont pas en harmonie avec mon cerveau de vendredi frit en fin de journée, mais je vais tenter le coup.

En supposant que la classe LeaveRequest ressemble à ceci:

public class LeaveRequest { 
    public string Text { get; set; } 
    public string Number { get; set; } 
} 

Les clés de formulaire affichées doivent être:

leaveRequest.Text 
leaveRequset.Number 

C'est la partie facile. La liaison 1-N d'une liste de DayRequested devient un peu bizarre. Dites l'objet DayRequested ressemble à ceci:

public class DayRequested { 
    public string Words { get; set; } 
    public string Data { get; set; } 
} 

Vos clés de formulaire affichées ressemblent:

requestedDays[0].Data 
requestedDays[0].Words 
requestedDays[1].Data  
requestedDays[1].Words 
requestedDays[2].Data  
requestedDays[2].Words 
requestedDays[3].Data  
requestedDays[3].Words 

Le liant par défaut MVC devrait trun alors les 10 valeurs de formulaire dans vos deux arguments de la méthode ... a poco et une liste des POCO.

+0

Je suis confus. Mes clés affichées sont 'requestedDays [x] .Class.Field' dès maintenant. Je veux changer ça en 'requestedDays [x] .Field' sans avoir besoin de tout renommer manuellement. –