2012-02-20 7 views
0

jqGridを使用して、自分のコントローラ上でアクションメソッドを呼び出すことができません。私は全く新しいので、おそらく初心者の間違いがたくさんあります。私はjqGridsのドキュメントからサンプルコードを取り出して少し修正しました。ビュー内のjqGridおよびMVC3 urlアクションメソッドが呼び出されない

コード:コントローラで

$(function() { 
    $("#list").jqGrid({ 
     url: '@Url.Action("GetContactRows", "Contact")', 
     datatype: 'json', 
     mtype: 'GET', 
     colNames: ['Name', 'Address', 'City'], 
     colModel: [ 
      { name: 'Name', index: 'Name', width: 80 }, 
      { name: 'Address', index: 'Address', width: 80 }, 
      { name: 'City', index: 'City', width: 80 } 
     ], 
     pager: '#pager', 
     rowNum: 10, 
     rowList: [10, 20, 30], 
     sortname: 'invid', 
     sortorder: 'desc', 
     viewrecords: true, 
     gridview: true, 
     caption: 'List of Contacts' 
    }); 
}); 

コード:

public JsonResult GetContactRows(string sidx, string sord, int page, int rows, bool search, string filters) 
    { 
     System.Diagnostics.Debug.WriteLine("asdf"); 

     return new JsonResult(); 
    } 

私は私のコントローラのアクションメソッドにブレークポイントを設定したが、私はちょうどそれがヒットすることができません。

答えて

3

パラメータは、でなく、searchとする必要があります。また、JSONデータを渡すようには見えません。ここでは例を示します。また、

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult GetContactRows(string sidx, string sord, int page, int rows, bool _search, string filters) 
    { 
     var data = new 
     { 
      page = 1, 
      total = 1, 
      records = 3, 
      rows = new[] 
      { 
       new 
       { 
        id = 1, 
        cell = new[] { "Name 1", "Address 1", "City 1" }, 
       }, 
       new 
       { 
        id = 2, 
        cell = new[] { "Name 2", "Address 2", "City 2" }, 
       }, 
       new 
       { 
        id = 3, 
        cell = new[] { "Name 3", "Address 3", "City 3" }, 
       } 
      } 
     }; 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 
} 

お知らせパラメータ名として_searchを使用して、アクションの署名とは、私たちがJSONを返すときJsonRequestBehavior.AllowGetを使用してGET要求を許可することに注意してください。

とビュー:

<script src="@Url.Content("~/Scripts/jqgrid/js/jquery.jqGrid.min.js")" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(function() { 
     $("#list").jqGrid({ 
      url: '@Url.Action("GetContactRows", "Home")', 
      datatype: 'json', 
      mtype: 'GET', 
      colNames: ['Name', 'Address', 'City'], 
      colModel: [ 
       { name: 'Name', index: 'Name', width: 80 }, 
       { name: 'Address', index: 'Address', width: 80 }, 
       { name: 'City', index: 'City', width: 80 } 
      ], 
      pager: '#pager', 
      rowNum: 10, 
      rowList: [10, 20, 30], 
      sortname: 'invid', 
      sortorder: 'desc', 
      viewrecords: true, 
      gridview: true, 
      caption: 'List of Contacts' 
     }); 
    }); 
</script> 

<table id="list"></table> 

<rant>

も簡単に問題のこれらの種類をデバッグすることは、このようなFirebugのようjavascriptのデバッグツールを使用してくださいすることができるようにします。ブラウザですべてのAJAXリクエストを見ることができるだけでなく、サーバが応答として送信するものも表示されます。もしあなたがそれをしたなら、あなたはすぐにこのエラーを見たでしょう。

jqGrid Webサイトにアクセスしてダウンロードし、新しいASP.NET MVC 3アプリケーションを作成し、コードをコピーして貼り付け、以前ダウンロードしたjqGridを参照し、実行するにはF5を押しますFireFoxのF12を押してFireBugを開き、jqGridが実行しようとしたAJAXリクエストが赤色で表示されていることを確認してください(サーバーがHTTP 500ステータスコードを返したため)。このAJAXリクエストの横にある+記号をクリックし、それは、非NULL可能ブール値ですsearchパラメータの値を見つけるParamsタブをクリックし、クライアントから送信された正確なパラメータを見ることができないことを私に言ってサーバから送信された例外メッセージ:

enter image description here

正しいツールを使用してウェブ開発を行うのが簡単であることは分かりますか? 70秒。 StackOverflowで質問するよりも高速です。

</rant>

+0

あなたの優れた答えに感謝します。私もこのエラーに遭遇した:http://stackoverflow.com/questions/5970600/jqgrid-error-b-jgrid-jqid-is-not-a-function。私はあなたのに同意します、私の問題はIE以外のブラウザをインストールすることが許可されていないことです。しかし、F12モードも同様に役立ちました。 – kaze

+1

@kaze、IE以外のブラウザはインストールできません。そして彼らはあなたにウェブ開発を期待していますか?あなたは審問のために働いていますか?間違ったことをしたことで罰せられましたか? –

+0

それはそうです - 私はFFや他の "必須"ツールをインストールできるようにルールを変更する作業に取り組んでいます。 – kaze

関連する問題