2009-01-28 5 views
5

J'ai un lien action Ajax qui demande une chaîne dans la méthode du contrôleur. Je veux insérer cette chaîne dans un attribut d'un lien hypertexte. HOw dois-je spécifier le champ d'attribut de l'élément id cible?ASP.NET MVC: AJAX ActionLink - Ciblage d'un attribut HTML

<img id="CHANGE-MY-SRC" src=ViewData["src"] > 

<%=Ajax.ActionLink("Change IMG Source","actionChange",new AjaxOptions()   
UpdateTargetId="CHANGE-MY-SRC"})%> 

public string actionChange() 
{ 
    ViewData["src"]= "somethingNew"; 

    return ???????? 
} 

Répondre

8

Le comportement par défaut pour les aides Ajax n'appuierai pas. Vous pouvez cependant créer un gestionnaire JavaScript personnalisé qui est exécuté lorsque la requête Ajax est renvoyée, puis l'utiliser pour injecter la valeur dans l'attribut.

Créer un fichier JavaScript commun (chargez-le dans la page maître, par exemple) et ajoutez cette fonction:

// Creates an Ajax OnComplete handler that will inject 
///the contents into the specified attribute, rather than the InnerHtml 
function createAttributeInjector(attributeName) { 
    return function(ajaxContext) { 
     if(ajaxContext.get_updateTarget() !== null) { 
      ajaxContext.get_updateTarget()[attributeName] = ajaxContext.get_data(); 
     } 
     // IMPORTANT: Suppress the default behavior! 
     return false; 
    } 
} 

Puis, lors de la construction de votre lien Ajax:

Ajax.ActionLink("Change IMG Source", "actionChange", new AjaxOptions() { 
    UpdateTargetId="CHANGE-MY-SRC", 
    OnCompleted="createAttributeInjector('src')" 
} 

Disclaimer: Je ne l'ai pas été en mesure de donner à ce test, mais je l'ai fait des choses semblables avec les aides Ajax. Poster dans les commentaires pour ma réponse si vous avez des problèmes et je suis heureux de vous aider! Si cela fonctionne, faites le moi savoir dans les commentaires!

Si vous avez la source (you can get it on CodePlex), vous pouvez consulter le fichier AjaxContext.cs dans le projet MicrosoftMvcAjaxScript pour une liste complète des propriétés que vous pouvez accéder à partir du gestionnaire OnCompleted

2

Je ne sais pas exactement ce que vous voulez dire, mais vous pouvez fournir un ensemble de attributs HTML certaines versions de l'extension ActionLink.

Ajax.ActionLink(string linkText, 
       string action, 
       object routeValues, 
       AjaxOptions ajaxOptions, 
       object htmlAttributes) 

Exemple:

<%= Ajax.ActionLink("add", 
        "AddThing", 
        new { id = ViewData.Model.ID }, 
        new AjaxOptions { Confirm = "Are you sure?", 
             UpdateTargetId = "thingList" 
            }, 
        new { title = "Add a thing to the database." }); %> 
+0

L'ID cible est d'une balise d'image, et je veux changer l'attribut src de l'étiquette en tant que src = "nouveau texte" lorsque l'appel ajax revient avec "nouveau texte". – zsharp

0

Beaucoup plus simple que je suppose, vous peut utiliser Url.Action (l'action que vous définissez celui qui renvoie la chaîne que vous voulez, mais au lieu de retourner vous utilisez Response.Write (...).

Ou encore plus simple, vous utilisez src = "<% = ViewData ["src"]%> "dans votre tag!

Je vois que vous avez déjà une solution, mais Cela pourrait vous faire gagner du temps la prochaine fois ..

Questions connexes