2010-05-18 3 views
13

J'utilise l'aide Html.DropDownList dans ASP.NET MVC et je voudrais le rendre en lecture seule. Malheureusement, j'ai également besoin de soumettre sa valeur sur un formulaire.Faire une liste déroulante en lecture seule, mais en soumettant toujours sa valeur

J'ai trouvé (par l'intermédiaire d'un similar question on SO) qu'en utilisant le format ci-dessous, la liste déroulante sera lue en lecture seule, mais elle ne donnera pas accès à la valeur du contrôle dans le contrôleur.

Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" }) 

Est-ce que quelqu'un sait comment faire une liste déroulante en lecture seule ou désactivée avec ASP.NET MVC, tout en lui permettant de présenter une forme post?

+0

Il est vraiment bizarre: Nous avons utilisé le code que vous incluez dans votre question, et il a travaillé très bien pour nous jusqu'à cette semaine. Je suspecte soit la mise à jour à MVC 3 ou les fonctionnalités de validation côté client que nous avons ajoutées récemment. – StriplingWarrior

Répondre

19

Il s'agit d'un comportement prévu du côté du navigateur Web - un contrôle désactivé ne publiera pas ses données sur le serveur lorsqu'un formulaire est soumis.

Vous pouvez truquer en mettant un champ caché sur la page avec la valeur qu'il contient - assurez-vous simplement de valider les données. Ou utilisez javascript pour activer le champ avant que l'action de soumission ne se produise.

Si vous désactivez un champ, mais que vous l'affichez toujours sur la page avec une certaine valeur, il doit alors vous être possible de connaître cette valeur sans la renvoyer du navigateur au serveur.

+2

Une excellente réponse. –

+0

@Prescott bonne réponse – User

7
  1. Faites-en plutôt une zone de texte.
  2. Ajouter un événement de changement avec JavaScript:

    $('#dropdown').change(function(e) { e.preventDefault(); });

  3. ont une liste déroulante avec seulement 1 point en elle.

  4. Avoir un élément caché avec la valeur réelle de la liste déroulante dans celui-ci, de sorte que est soumis même si la liste déroulante désactivée ne le fait pas.
10

Vous pouvez l'activer lors de l'envoi. Inconvénient: ça a l'air bizarre.

$(form).submit(function() { 
    $('#Types').removeAttr('disabled'); 
}); 

ou de copier la valeur dans un champ masqué sur submit.

$(form).submit(function() { 
    $('#HiddenField').val($('#Types').val()); 
}); 
0

je pense est à afficherons la meilleure solution par

$.post(url, 
{ 
    AID: val1, 
    CID: val2 
}, 
    function (data) { 
    // act on model 
    } 
); 
Questions connexes