2011-02-02 10 views
0

私は少し失われています。たぶん、jQueryがうまく(またはまったく)理解できないことがあります。私はwebgridとMVC3アプリを持っている。 webgridのカラムは 'edit'用です。これはコントローラを呼び出してJSONオブジェクトを返すべきです。これはすべてMVC2で機能しましたが、MVC3の変更ではそれ以上は機能しません。jQueryによる控えめなjavascriptを使用したAjax.ActionLink

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); 
    ... 
} 

のか::だから、このようにしてみてください

$(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

おかげであなたは、これは多くのことを助けた:あなたは簡単にAJAXifyは別のファイルになり

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

。どのようにフォームURLを設定することをお勧めしますか?合格? – jdiaz

+0

@ jdiazの場合、JSONレスポンスの一部としてサーバーに直接このURLを返させることもできます: 'var form_url = data.url;'。 –

関連する問題