2010-04-02 6 views
0

Je le code suivant dans une vue partielle (en utilisant Spark):jQuery: modifier la valeur du champ de formulaire caché avant soumettre

<span id="selectCount">0</span> video(s) selected. 
    <for each="var video in Model"> 
    <div style="padding: 3px; margin:2px" class="video_choice" id="${video.YouTubeID}"> 
     <span id="video_name">${video.Name}</span><br/> 
     <for each="var thumb in video.Thumbnails"> 
     <img src="${thumb}" /> 
     </for>  
    </div>  
    </for> 

    # using(Html.BeginForm("YouTubeVideos","Profile", FormMethod.Post, new { id = "youTubeForm" })) 
    # { 
    <input type="hidden" id="video_names" name="video_names" /> 
    <input type="submit" value="add selected"/> 

    # } 

    <ScriptBlock> 
    $(".video_choice").click(function() { 
     $(this).toggleClass('selected'); 
     var count = $(".selected").length;  
     $("#selectCount").html(count); 
    }); 

    var options = { 
     target: '#videos', 
     beforeSubmit: function(arr, form, opts) { 
     var names = []; 
     $(".selected").each(function() { 

      names[names.length] = $(this).attr('id'); 
     }); 
     var namestring = names.join(","); 
     $("#video_names").attr('value',namestring); 
     //alert(namestring); 
     //arr["video_names"] = namestring; 
     //alert($.param(arr)); 
     //alert($("#video_names").attr('value')); 
     return true; 
     } 
    }; 

    $("#youTubeForm").ajaxForm(options); 

    </ScriptBlock> 

essentiellement i afficher une série de divs qui contiennent les informations extraites de l'API YouTube. J'utilise jQuery pour permettre à l'utilisateur de sélectionner les vidéos qu'il souhaite ajouter à son profil. Lorsque je soumets le formulaire, je voudrais remplir le champ caché avec une liste d'identifiants vidéo séparés par des virgules. Tout fonctionne sauf que lorsque j'essaie de définir la valeur du champ, dans le contrôleur en post, le champ revient vide. J'utilise le plugin jQuery ajax form. Qu'est-ce que je fais de mal qui ne permet pas d'envoyer la valeur que j'ai définie dans le champ au serveur?

Répondre

3

Donnez à ce essayer la place pour votre beforeSubmit:

var ids = $(".selected").map(function() { return this.id; }).get().join(','); 
$("#video_names").val(ids); 
return true; 
+0

j'ai essayé votre suggestion, mais a obtenu le même résultat :( –

+1

@ Jason - Essayez de changer 'beforeSubmit: function (arr, sous forme, opte)' pour 'beforeSerialize: function()', obtenez-vous la valeur alors? –

+0

ah, ha! qui l'a fait :) merci. –

Questions connexes