2013-02-18 6 views
0

J'ai un problème étrange. Je fais une forme dynamique dans Razor. J'utilise le dictionnaire pour stocker dynamiquement les entrées ajoutées. Je Générez du code comme ça:KeyPairValue dans ASP.NET MVC3 Razor

<input type="hidden" value="96" name="Inputs[0].Key"> 
<input type="text" name="Inputs[0].Value"> 

Je reçois dans mon contrôleur ce dictionary. Il y a toujours autant d'éléments que j'ai ajoutés, mais tous sont vides.

Cela fait partie de mon modèle:

public class MetriceModelTaskSchedule 
{ 
    public IEnumerable<KeyValuePair<long, string>> Inputs { get; set; } 
} 

Que peut-être mal ici?

+0

Vous avez peut-être manqué le code? – Lobo

+0

ok, maintenant je peux voir le code. – Lobo

Répondre

2

Qu'est-ce qui ne va pas ici?

Le fait que la classe KeyValuePair<TKey, TValue> a les propriétés Key et Value qui sont en lecture seule. Ils n'ont pas de définition signifiant que le classeur modèle ne peut simplement pas définir leur valeur.

Alors, comme toujours commencer par définir un modèle de vue:

public class InputViewModel 
{ 
    public long Key { get; set; } 
    public string Value { get; set; } 
} 

puis:

public class MetriceModelTaskSchedule 
{ 
    public IEnumerable<InputViewModel> Inputs { get; set; } 
} 

Sinon, vous pouvez utiliser un dictionnaire:

public class MetriceModelTaskSchedule 
{ 
    public IDictionary<long, string> Inputs { get; set; } 
} 

Assurez-vous également que vous ont respecté le standard naming convention pour vos champs de saisie dans la vue afin que le classeur modèle puisse succ associez-les à votre modèle:

<div> 
    <input type="text" name="Inputs[0].Key" value="1" /> 
    <input type="text" name="Inputs[0].Value" value="value 1" /> 
</div> 
<div> 
    <input type="text" name="Inputs[1].Key" value="2" /> 
    <input type="text" name="Inputs[1].Value" value="value 2" /> 
</div> 
... 
+0

J'ai fait comme vous avez écrit (j'ai ajouté un modèle supplémentaire) et j'ai toujours 0 pour chaque clé et null pour chaque valeur. –

+0

Ensuite, vous n'avez probablement pas respecté la convention de dénomination pour vos champs de saisie. Veuillez lire l'article auquel j'ai associé dans ma réponse et assurez-vous que vos champs de saisie sont nommés en conséquence lorsque vous inspectez le code HTML de votre page. –

+0

Oh, ouais, c'était ça. Je le faisais correctement, mais quand je cherchais des erreurs j'ai fait une autre erreur. Merci de votre aide! –

Questions connexes