2011-12-21 12 views
0

私はjTemplatesの正しいフォーマットを構築する際に問題があります。いくつかの助けが必要です。 これは私が持っているものです:WebMethodを持つASP.NETページ。このWebMethodはjQueryにデータを返します。データはjTemplateによって処理されるはずですが、jTemplateの形式が不明です。jQueryとjTemplates - 適切な値を取得する方法は?

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Text; 
using Microsoft.Practices.EnterpriseLibrary.Data; 
using System.Data.Common; 
using System.Web.Services; 
using System.Linq; 
using System.Web.Script.Services; 

public partial class jpaging : System.Web.UI.Page 
{ 
    [WebMethod] 
    public static IEnumerable PagingData(int Page, int PageSize) 
    { 
     // talk to database and return datatable 
     Database db = DatabaseFactory.CreateDatabase(); 
     using (DbCommand cmd = db.GetStoredProcCommand("Paging")) 
     { 
      db.AddParameter(cmd, "@Page", DbType.Int32, 4, ParameterDirection.Input, true, 10, 0, null, DataRowVersion.Default, Page); 
      db.AddParameter(cmd, "@PageSize", DbType.Int32, 4, ParameterDirection.Input, true, 10, 0, null, DataRowVersion.Default, PageSize); 
      using (DataTable dt = (db.ExecuteDataSet(cmd)).Tables[0]) 
      { 
       var t = from data in dt.AsEnumerable() select data.ItemArray; 
       return t; 
      } 
     } 
    } 
} 

"return t"から返されるデータは、次の形式です。

{"d":[ 
[1,1,"First 1","Last 1",301], 
[2,2,"First 2","Last 2",301], 
[3,3,"First 3","Last 3",301], 
[4,4,"First 4","Last 4",301], 
[5,5,"First 5","Last 5",301], 
[6,6,"First 6","Last 6",301], 
[7,7,"First 7","Last 7",301], 
[8,8,"First 8","Last 8",301], 
[9,9,"First 9","Last 9",301], 
[10,10,"First 10","Last 10",301] 
]} 

私はjTemplatesにデータを解析するために、次のコードを使用しています:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jpaging.aspx.cs" Inherits="jpaging" EnableViewState="false" %> 
<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 
<script src="paging/jquery-jtemplates.js" type="text/javascript"></script> 
<script type="text/javascript"> 

var currentPage = 1; 
var pageSize = 10; 

$(document).ready(function() { 
    loadData(1); 
}); 

function loadData(page) { 
    currentPage = page; 
    $.ajax({ 
     type: "POST", 
     url: "jpaging.aspx/PagingData", 
     data: "{'Page':'" + page + "', 'PageSize':'" + pageSize + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      doTemplating(msg); 
      // .... 
     } 
    }); 
} 

function doTemplating(msg) { 
    $('#cont').setTemplateURL('/mytemplate.htm', null, { filter_data: false }); 
    $('#cont').processTemplate(msg); 
} 

</script> 
</head> 
<body> 

    <table id="rsstable" cellspacing="0"> 
    <thead> 
     <tr><th>ID</th><th>First</th><th>Last</th></tr> 
    </thead> 
    <tbody id="cont"></tbody> 
    </table> 

</body> 
</html> 

私はmytemplate.htmどのように構築するかわからない午前:

{#foreach $T.d as post} 
<tr>  
    <td> <-- what to write here for column1? --> </td> 
    <td> <-- what to write here for column2? --> </td> 
    <td> <-- what to write here for column3? --> </td> 
</tr> 
{#/for} 

私は何かを試してみました{$ T.post [0]}のように動作しません。私はWebMethod属性からこのような何かを返す回避したい側の注意点として

var feeds = from feed in dt.AsEnumerable() 
      select new 
      { 
       EmployeeID = feed["EmployeeID"], 
       FirstName = feed["FirstName"], 
       LastName = feed["LastName"], 
       Total = feed["TotalRows"] 
      }; 
    return feeds; 

それが事実だった場合、私はちょうどこのようなものだろう:

{#foreach $T.d as post} 
<tr> 
    <td>{$T.post.EmployeeID}</td> 
    <td>{$T.post.FirstName}</td> 
    <td>{$T.post.LastName}</td> 
</tr> 
{#/for} 

を。 ..しかし私はこれを避けるために、テンプレートをより汎用的にする/他の返されたデータに使用できるようにしたい。

提案がありますか? :-)

答えて

0

私はJSONPがあなたがやっていることに合っていないのですか? JSONPはGET HTTPアクション(POSTではなく)のみをサポートしています。ここを参照してください:Post data to JsonP

あなたがCORSとのクロスドメインの投稿を行うことができ、ここを参照してください:How can I display a JavaScript object?http://enable-cors.org/

を私は放火犯を使用して、戻り変数を調べたり、ロギングのこのスタイルを使用するために、デバッグポイントを使用してのいずれかをお勧めします。それは返されているものを見ることができます。その後、問題をJTemplateと具体的に絞り込むことができます。代わりに、jquery.tmplというjqueryにテンプレートを組み込むこともできます。http://api.jquery.com/jquery.tmpl/

+0

戻ってくれてありがとうございます。間違った用語(JSONP)を使用しています。 基本的には、戻り値の変数 'return t 'から返されたデータをループすることです。返されるデータがわかっているので(上記のように)、firebugを使ってデバッグする必要はありません。 基本的には、ループ内の列名を参照するのではなく、jTemplateまたはjquery.tmplを使用して項目/値のプロパティを参照できますか? – Sha

+0

少なくともjquery.tmplでは可能です。おそらくjTemplateでもですか?私がやったのは、セットアップテンプレートです。テンプレートの各部分が動作していることを確認するために、小さな部分に表示するようにしました。つまり、各行の文字列バージョンを印刷するようにしてください。次に、各セルを印刷するようにしてください。テンプレートは苦痛であり、しばらく時間がかかります。それはあなたが行くように確認小さなビットで、それを取るのが最善です。 – Dessus

関連する問題