2009-01-28 2 views
5

Tôi có một liên kết hành động Ajax yêu cầu một chuỗi trong phương thức điều khiển. Tôi muốn chèn chuỗi đó vào một thuộc tính của một siêu liên kết. Tôi làm cách nào để chỉ định trường thuộc tính của phần tử id mục tiêu?ASP.NET MVC: AJAX ActionLink- Nhắm mục tiêu thuộc tính 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 ???????? 
} 

Trả lời

8

Hành vi mặc định cho những người giúp đỡ Ajax sẽ không hỗ trợ này. Tuy nhiên, bạn có thể tạo trình xử lý JavaScript tùy chỉnh chạy khi yêu cầu Ajax trả về và sau đó sử dụng nó để chèn giá trị vào thuộc tính

Tạo một tệp JavaScript phổ biến (tải nó lên trang Chính)) và thêm chức năng này:

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

Sau đó, khi xây dựng liên kết Ajax của bạn:

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

Disclaimer: tôi đã không thể để cung cấp cho một thử nghiệm, nhưng tôi đã thực hiện điều tương tự với những người trợ giúp Ajax. Đăng trong các ý kiến ​​cho câu trả lời của tôi nếu bạn có vấn đề và tôi rất vui được giúp đỡ! Nếu nó hoạt động, hãy cho tôi biết trong phần bình luận!

Nếu bạn có nguồn (you can get it on CodePlex), bạn có thể kiểm tra các tập tin AjaxContext.cs trong dự án MicrosoftMvcAjaxScript cho một danh sách đầy đủ các thuộc tính bạn có thể truy cập từ các handler OnCompleted

2

Tôi không chắc chắn chính xác những gì bạn có ý nghĩa nhưng bạn có thể cung cấp một tập hợp các thuộc tính HTML một số phiên bản của phần mở rộng ActionLink.

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

Ví dụ:

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

ID mục tiêu là của thẻ hình ảnh và tôi muốn thay đổi thuộc tính src của thẻ là src = "văn bản mới" khi cuộc gọi ajax trả về bằng "văn bản mới". – zsharp

0

đơn giản hơn nhiều tôi đoán, bạn có thể sử dụng Url.Action (hành động bạn thiết lập một trong đó trả về chuỗi bạn muốn, nhưng thay vì trả lại bạn sử dụng Response.Write (...)

Hoặc thậm chí đơn giản hơn, bạn sử dụng src = "<% = ViewData ["src"]%> "trong thẻ của bạn!

Tôi thấy bạn đã có giải pháp, nhưng thứ có thể giúp bạn tiết kiệm thời gian tiếp theo ..