2010-10-21 6 views
-1

J'écris ma première page Web ASP.Net et utilise MVC.Comment accéder à une valeur de variable affectée à une variable HTML.Hidden dans une méthode d'action de contrôleur MVC

J'ai une chaîne que je construis dans une vue partielle avec un contrôle de grille (DevExpress MVCxGridView). Dans ma vue partielle, j'utilise une aide HTML.Hidden comme indiqué ci-dessous.

' Create a hidden variable to pass back a comma-delimited string 
Response.Write(Html.Hidden("exclusionList", Model.ExclusionList)) 

La valeur de cet élément caché est attribué à côté client javaScript:

exclusionListElement = document.getElementById("exclusionList"); 
// ... 
exclusionString = getExclusionString(); 
exclusionListElement.value = exclusionString; 

Cela semble fonctionner sans problème.

Dans ma méthode d'action du contrôleur:

 <AcceptVerbs(HttpVerbs.Post)> _ 
    Public Function MyPartialCallback(updatedItemList As myModel) As ActionResult 

     Dim myData As myModel = GetMyModel() 

     Return PartialView("MyPartial", myModel.myList) 
    End Function 

Le paramètre updatedItemList est toujours rien et la liste d'exclusion existe pas où dans les Request.Forms.

Mes questions sont les suivantes:

  1. Quelle est la bonne façon d'utiliser Html.Hidden pour que je puisse accéder aux données dans une méthode d'action du contrôleur MVC.

  2. Est-ce que l'ajout de variables "cargo" à Request.Form est le meilleur et le seul moyen d'envoyer des données à une méthode d'action de contrôleur MVC côté serveur? Il semble juste comme approche de ficelle et de bande. Y a-t-il une approche plus structurée?

+0

'Response.Write'? Mais pourquoi? – bzlm

Répondre

0

Si vous avez besoin pour obtenir le dos variables exclusionList, il vous suffit d'ajouter une propriété à votre modèle de vue qui correspond à ce nom exactement. Assurez-vous qu'il est du type correct (string il ressemble à dans ce cas), puis il doit remplir automatiquement cette propriété dans le modèle de vue pour vous.

Et oui, l'appel Response.Write n'est pas nécessaire. Au lieu de cela, utilisez simplement l'aide Html.HiddenFor(...) dans votre vue.

+0

J'ai essayé aussi - mais en vain. Je pense que la seule façon de le faire est avec un appel ajax à une méthode de contrôleur. Actuellement, dans mon ascx (vue partielle), je définis un Html.ActionLink qui appelle une fonction côté client qui appelle une fonction javaScript pour mettre à jour partial et renvoie true pour passer à une méthode de contrôleur côté serveur. Comme je ne veux vraiment pas de post-retour, j'ai besoin d'appeler une méthode de contrôleur via ajax. Je me demande si Ajax.ActionLink me permettra d'appeler la même méthode javaScript suivie d'une méthode de contrôleur (sans retour de vue ...)? –

+0

Si vous appelez le serveur via Ajax, vous devrez remplir vous-même l'objet de données pour la requête. Ce n'est pas géré par le navigateur à moins que vous ne publiiez ... ou je suppose que si vous utilisez un framework JavaScript qui le gère pour vous. En supposant que vous utilisez jQuery, transmettez simplement la requête à un objet avec une propriété nommée 'data' et assurez-vous que les propriétés de vos données correspondent à votre action de contrôleur. –

0

Regardez le code HTML généré. Notez l'attribut name du champ caché. Utilisez ce nom comme nom de paramètre d'action:

Public Function MyPartialCallback(exclusionList As string) 
+0

Merci pour la réponse, j'ai essayé cette suggestion mais le résultat est toujours que exclusionList = Nothing dans la méthode d'action. –

Questions connexes