2011-02-02 50 views
0

我有點失落。也許這就是我不瞭解jQuery(或者完全不瞭解)。我有一個webgrid的MVC3應用程序。 webgrid的一列是'edit',它應該調用控制器並返回一個JSON對象。這一切都在MVC2中工作,但隨着MVC3的變化,它不再工作。Ajax.ActionLink通過jquery帶有不顯眼的javascript

grid.Column(header: "", format: (item) => Ajax.ActionLink("Edit" "Edit", new { id = item.id }, new AjaxOptions { OnSuccess = "handleEdit" })), 

以前我能夠定義JavaScript這樣:

 function handleEdit(context) { 
    var json = context.get_data(); 
    var data = Sys.Serialization.JavaScriptSerializer.deserialize(json); 
    var form_url = '/taskstatus/update/' + data.id; 

    // update elements on the page 
    $('#add_link').hide(); 
    $('form').attr('ACTION', form_url); 
    $('#TaskStatus_status_code').val(data.status_code); 
    $('#TaskStatus_status_description').val(data.status_description); 
    $('#TaskStatus_active').attr('checked', data.active); 
    $('#submit').val('update'); 
    $('#form').show('fast'); 
    } 

現在,當我點擊鏈接我得到的JSON作爲下載的文件。如何用新的不顯眼的方式做到這一點?

回答

1

Ajax.*助手在ASP.NET MVC 3中默認使用jquery。這意味着在成功回調中,不再獲取上下文作爲第一個參數,而是獲取服務器返回的值。您不再有任何get_data()功能。這是一個字符串值,代表您的服務器響應。因此,嘗試這樣的:

function handleEdit(result) { 
    var data = $.parseJSON(result); 
    ... 
} 

甚至更​​好的使用正常的鏈接:

grid.Column(
    header: "", 
    format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.id }) 
) 

,你會很容易AJAXify在一個單獨的文件:

$(function() { 
    $('#gridId a').click(function() { 
     $.get(this.href, function(data) { 

      // WARNING: you probably don't want to hardode urls like this 
      var form_url = '/taskstatus/update/' + data.id; 

      // update elements on the page 
      $('#add_link').hide(); 
      $('form').attr('ACTION', form_url); 
      $('#TaskStatus_status_code').val(data.status_code); 
      $('#TaskStatus_status_description').val(data.status_description); 
      $('#TaskStatus_active').attr('checked', data.active); 
      $('#submit').val('update'); 
      $('#form').show('fast'); 
     }); 
     return false; 
    }); 
}); 
+0

感謝你這幫助了很多。你會建議如何設置表單url?傳入? – jdiaz 2011-02-02 23:37:13