2009-01-28 24 views
5

Tengo un actionlink Ajax que solicita una cadena en el método del controlador. Quiero insertar esa cadena en un atributo de un hipervínculo. ¿Cómo especifico el campo de atributo del elemento id de destino?ASP.NET MVC: AJAX ActionLink: segmentar un atributo 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 ???????? 
} 

Respuesta

8

El comportamiento predeterminado de los helpers de Ajax no va a apoyar esto. Sin embargo, puede crear un controlador JavaScript personalizado que se ejecute cuando la solicitud Ajax regrese y luego usarlo para inyectar el valor en el atributo

Cree un archivo JavaScript común (cárguelo en la página Maestra, por ejemplo) y añadir esta función:

// 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; 
    } 
} 

Entonces, cuando la construcción de su enlace Ajax:

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

Negación: no he podido dar a esto una prueba, pero he hecho cosas similares con los ayudantes de Ajax. Publicar en los comentarios de mi respuesta si tiene problemas y estoy feliz de ayudar! Si funciona, házmelo saber en los comentarios también!

Si usted tiene la fuente (you can get it on CodePlex), se puede extraer el archivo AjaxContext.cs en el proyecto MicrosoftMvcAjaxScript para obtener una lista completa de las propiedades que puede acceder desde el controlador OnCompleted

2

No estoy seguro exactamente lo que quiere decir pero no puede suministrar un conjunto de atributos HTML algunas versiones de la extensión ActionLink.

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

Ejemplo:

<%= 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

El ID de destino es de una etiqueta de imagen, y quiero cambiar el atributo src de la etiqueta como src = "new text" cuando la llamada ajax retorna con "texto nuevo". – zsharp

0

Mucho más simple que supongo, que podría usar Url.Action (la acción que estableces es la que devuelve la cadena que deseas, pero en lugar de regresar usas Response.Write (...).

O incluso más simple, usas src = "<% = ViewData ["src"]%> "en su etiqueta!

Veo que ya tiene una solución, pero th es posible ahorrarle tiempo la próxima vez ...

Cuestiones relacionadas