2009-07-18 6 views
3

Supposons que je souhaite utiliser le lien d'action ajax pour enregistrer un champ sans modification pour la vue.Comment obtenir une entrée utilisateur pour la méthode d'appel à l'action Ajax.ActionLink?

Voici mon point de vue (il est une vue fortement typée lié au type de modèle):

<%= Html.TextBox("myComment", Model.MyComment)%> 
    <%= Ajax.ActionLink("SAVE", "SaveComment", "Home", 
     Model, new AjaxOptions { HttpMethod = "POST"}) 
    %> 

Voici mon action pour ajax ActionLink dans le contrôleur:

[AcceptVerbs(HttpVerbs.Post)] 
public void SaveComment(Model model) 
{ 
    MyRepository repository = new MyRepository(); 
    Model mod = repository.GetModel(model.ID); 
    mod.MyComment = model.MyComment; 

    try 
    { 
     repository.Save(); 
    } 
    catch(Exception ex) 
    { 
     throw ex; 
    }   
} 

Le problème est: Je ne peux pas obtenir l'entrée de l'utilisateur dans la zone de texte pour Mycomment dans la méthode d'action. Quelle que soit la saisie de l'utilisateur dans le navigateur pour Mycomment, lorsque vous cliquez sur Ajax ActionLink SAVE, je vérifie la valeur du modèle param pour Mycomment, il n'y a rien de changé pour MyComment.

Confused est: Le modèle doit être lié à la vue dans les deux sens. mais pour ce cas, il semble que non. Puis j'ai changé l'appel Ajax.ActionLink à:

Ajax.ActionLink("SAVE", "SaveComment", "Home", 
     new {commentinput =Model.MyComment, new AjaxOptions { HttpMethod = "POST"}) 

a ensuite changé la signature de la méthode d'action:

public void SaveComment(string commentinput) 

Je ne peux toujours pas obtenir l'entrée d'utilisateur.

Comment obtenir l'entrée de l'utilisateur dans la méthode d'action du contrôleur?

Répondre

4

AFAIK Ajax.ActionLink ne vous permet pas d'obtenir facilement des valeurs de formulaire et de les publier avec AJAX. Il ya quelques workarounds qui semblent assez hackish (en regardant le dernier paragraphe Adaptation de l'URL dynamiquement me fait pleurer).

est ici la manière jQuery (je préfère si par rapport à MS Ajax):

<%= Html.TextBox("myComment", Model.MyComment) %> 
<%= Html.ActionLink("SAVE", "SaveComment", "Home", new { id = "saveComment" }) %> 

Et puis un gestionnaire attach discrètement d'événements, cliquez à l'ancre:

$(function() { 
    $('a#saveComment').click(function(evt) { 
     $.ajax({ 
      url : this.href, 
      data: { 
       // Assuming your model has a property called MyComment 
       myComment: $('#myComment').val() 
      }, 
      success: function(data, textStatus) { 
       // Comment saved successfully 
      } 
     }); 
     evt.preventDefault(); 
    }); 
}); 
+0

merci. mais ma vue est une table, <% = Html.TextBox ("myComment", Model.MyComment)%> est pour chaque ligne de la table. – KentZhou

Questions connexes