2011-01-25 3 views
2

J'utilise jquery-tmpl et recevoir les données suivantes JSON, que je me sers de validation de formulaire dans ASP.NET MVC3:problème avec un simple exemple jQuery Templates

{"Status":1,"Message":"Oh dear, what have you done. Check the list of errors dude!","Errors":["The Contents field is required.","The Date Created field is required.","The Date Updated field is required.","The Updated By field is required."]} 

Mon modèle ressemble à ceci:

<script id="ResponseTemplate" type="text/x-jquery-tmpl"> 
{{each(i, error) Errors}} 
    <li>${error}</li> 
{{/each}} 
</script> 

Mon JSON POST est la suivante:

var data = { 
    Contents: "This is a test", 
    DateCreated: "", 
    DateUpdated: "", 
    UpdatedBy: "Ben" 
}; 

$.ajax({ 
    url: '@Url.Action("save", "note")', 
    data: JSON.stringify(data), 
    type: 'POST', 
    contentType: 'application/json', 
    dataType: 'json', 
    success: function (result) { 
     alert(result.Errors); 
     $("#Responses").tmpl(result).appendTo("#ResponseTemplate") 
    } 
}); 

Les données sont correctes. L'alerte affiche le tableau Errors en tant que chaîne. Le modèle ne fonctionne tout simplement pas.

La réponse doit être simple.

Répondre

2

Je pense que vous avez juste Responses et ResponseTemplate mêlé:

$("#ResponseTemplate").tmpl(result).appendTo("#Responses"); 

Voici votre exemple (sans les appels AJAX): http://jsfiddle.net/andrewwhitaker/GcqZX/

Vous pouvez aussi écrire votre modèle comme celui-ci:

<script id="ResponseTemplate" type="text/x-jquery-tmpl"> 
    <li>${$data}</li> 
</script> 

Et appelez-le comme ceci:

$("#ResponseTemplate").tmpl(result.Errors).appendTo("#Responses"); 

(Je ne sais pas si c'est en fait mieux, mais je voulais simplement souligner que vous n'avez pas besoin d'utiliser {{each}} dans ce cas).

+0

Ta Andrew. Je l'ai compris aussi la nuit dernière. Était trop fatigué quand j'ai mis cela ensemble à l'origine! JSFiddle = Génial. – Junto

+0

@Junto: C'est bon de t'entendre comprendre. Ouais JSFiddle est un super outil! –