ASP.NET MVC: AJAX ActionLink - нацеливание на атрибут HTML - PullRequest
5 голосов
/ 28 января 2009

У меня есть Ajax actionlink, который запрашивает строку в методе контроллера. Я хочу вставить эту строку в атрибут гиперссылки. КАК указать поле атрибута целевого элемента id?

<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 ????????
}

Ответы [ 3 ]

8 голосов
/ 29 января 2009

Поведение по умолчанию для помощников Ajax не будет поддерживать это. Однако вы можете создать собственный обработчик JavaScript, который запускается при возврате Ajax-запроса, а затем использовать его для вставки значения в атрибут

Создайте общий файл JavaScript (например, загрузите его на главной странице) и добавьте следующую функцию:

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

Затем при построении Ajax-ссылки:

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

Отказ от ответственности: я не смог пройти этот тест, но я делал подобные вещи с помощниками Ajax. Пишите в комментариях к моему ответу, если у вас возникли проблемы и я с радостью помогу! Если это сработает, дайте мне знать в комментариях!

Если у вас есть источник (, вы можете получить его в CodePlex ), вы можете проверить файл AjaxContext.cs в проекте MicrosoftMvcAjaxScript для получения полного списка свойств, к которым вы можете получить доступ из обработчика OnCompleted

2 голосов
/ 28 января 2009

Я не совсем уверен, что вы имеете в виду, но вы можете предоставить набор атрибутов HTML для некоторых версий расширения ActionLink.

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

Пример:

<%= 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 голосов
/ 12 сентября 2009

Гораздо проще, я думаю, вы можете использовать Url.Action (действие, которое вы устанавливаете, которое возвращает желаемую строку, но вместо возврата вы используете Response.Write (...).

Или, что проще, вы используете src = "<% = ViewData [" src "]%>" в своем теге!

Я вижу, у вас уже есть решение, но это может сэкономить ваше время в следующий раз ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...