2010-06-23 6 views
0

pouvons-nous accéder aux valeurs de variables cachées dans un ActionResult d'un contrôleur si la valeur de la variable cachée est définie dans javascript?la valeur des variables cachées peut-elle être accédée dans un contrôleur dans MVC

+1

quel cadre vous mvc parlez? – Sarfraz

+0

ASP.NET MVC 1.0 En fait, je vais définir des valeurs calculées à certaines variables cachées dans jquery, peut-on accéder à ces variables dans ActionResult d'un contrôleur? – vinay

Répondre

1

Si vous faites référence à ASP.NET MVC et que la variable cachée que vous mentionnez est en fait un champ caché dans un formulaire qui est envoyé au contrôleur, alors la réponse est oui.

Ceci est un modèle fréquent dans les applications que j'écris. Supposons, par exemple, que vous modifiez les détails d'une personne. Le formulaire que vous remplissez contiendrait des champs visibles pour des choses comme le nom, l'âge, etc. - mais aurait également besoin d'un fichier caché qui contient l'ID de la personne pour laquelle vous modifiez les détails.

Si c'est le type de scénario que vous utilisez, le champ masqué est disponible pour le contrôleur de la même manière que le nom & champs d'âge.

EDIT: Suite à votre commentaire suivant, il semblerait que vous vous référez à des variables javascript. Si tel est le cas, ceux-ci ne sont pas directement disponibles pour le contrôleur, mais il est possible d'organiser cela en insérant la (les) variable (s) dans le formulaire.

//Javaacript 
var myVariable = calculateSomeValue(); 
$("#myFormField").val(myVariable); 
... 
//HTML 
<form action="..." method="post"> 
    <input type="hidden" name="myFormField" id="myFormField"/> 
    ... 
</form> 
... 
//Controller code 
ActionResult MyControllerAction(string myFormField, ...){ 
    DoSomethingWith(myFormField); 
} 

Si cela ne vous aide pas, pouvez-vous poster un exemple de code?

+0

en fait, je vais définir des valeurs calculées pour les champs cachés. Je veux que ces valeurs soient accessibles dans l'ActionResult d'un contrôleur. Est-ce possible? Pourriez-vous partager plus d'infos/liens sur ce sujet ... – vinay

+0

Mon article résume à peu près tout: calculez des valeurs, placez-les dans des champs cachés et définissez ces champs comme des arguments pour votre méthode Action. Je ne sais pas combien cela pourrait être plus simple? – belugabob

+0

belugabob .. thnx pour vos réponses rapides. la contrainte que j'ai est qu'il y aura plus de 25 params qui doivent être accédés afin de générer un rapport en pdf. dans ce cas, si toutes ces valeurs sont passées en arguments, alors l'URL ne sera pas conviviale. Pour cette raison, je pensais mettre ces valeurs dans des variables cachées et les accéder dans le contrôleur, comme nous le faisons dans nos applications web asp classiques .. si vous avez une autre meilleure approche pour y parvenir, plz suggérer. – vinay

3

Lorsque vous publiez des données dans un contrôleur, le contenu complet du formulaire (y compris les champs masqués) peut être publié. Le but d'un champ caché est de le cacher dans le client, pas quand les données sont envoyées au serveur. Les données du formulaire est emballé dans un POST et envoyé au serveur, quelle que soit la façon dont il est rempli, donc vous pouvez utiliser JQuery pour remplir les champs très bien ...

Donné ce formulaire:

<% Html.BeginForm(); %> 
    <input type="hidden" id="catID" name="catID" /> 
<% Html.EndForm(); %> 

vous pouvez le traiter comme paramètre d'itinéraire:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult DoSomething(string catID) 
{ 
    // Do stuff here... 
} 

Ou, comme un élément de l'instance FormCollection:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult DoSomething(FormCollection form) 
{ 
    string catID = form["catID"]; 

    // Do stuff here... 
} 

ou même comme un modèle d'entrée:

public class MyInputModel 
{ 
    public string catID; 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult DoSomething(MyInputModel input) 
{ 
    string catID = input.catID; 

    // Do stuff here... 
} 
+0

je vais définir des valeurs à une variable cachée comme ce $ ('#catID') .val ('asd') dans une fonction client() qui sera appelée à partir d'un HTML.ActionLink.Peut-on maintenant accéder à la valeur de "catID" dans le menu ActionResult? syntaxe/code pour faire ceci? Thnx .. – vinay

+0

Exemple mis à jour :) –