Я использую серверную часть ASMX для заполнения клиентской части jqGrid, в том числе клиентской подкачки сетки, чтобы все строки данных загружались одновременно.Мой вопрос заключается в том, является ли это лучшим подходом к производительности и надежности?Кроме того, если WCF будет лучше, чем ASMX, довольно легко преобразовать этот существующий набор в WCF (я предполагаю, что мне следует использовать методы WebGet в стиле REST, но я не уверен).Просто хочу, чтобы все было максимально быстро и быстро, практически без обратной передачи.
Вот код ASMX:
public class JQGrid
{
public class Row
{
public int id { get; set; }
public List<string> cell { get; set; }
public Row()
{
cell = new List<string>();
}
}
public int page { get; set; }
public int total { get; set; }
public int records { get; set; }
public List<Row> rows { get; set; }
public JQGrid()
{
rows = new List<Row>();
}
}
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[ScriptService]
public class JQGridService : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public JQGrid GetJQGrid(int pageIndex, int pageSize, string sortIndex, string sortDirection)
{
DataTable dt = GetDataTable( // command string );
if (dt == null)
throw new Exception("Unable to retrieve data.");
JQGrid jqGrid = new JQGrid();
foreach (DataRow sourceRow in dt.Rows)
{
JQGrid.Row targetRow = new JQGrid.Row();
targetRow.id = Convert.ToInt32(sourceRow["ID"]);
targetRow.cell.Add(sourceRow["ID"].ToString());
targetRow.cell.Add(sourceRow["SomeColumn"].ToString());
jqGrid.rows.Add(targetRow);
}
jqGrid.page = pageIndex;
jqGrid.records = jqGrid.rows.Count;
jqGrid.total = jqGrid.rows.Count; // Set this to total pages in your result...
return jqGrid;
}
}
JS на стороне клиента:
function getData(pdata)
{
var params = new Object();
params.pageIndex = pdata.page;
params.pageSize = pdata.rows;
params.sortIndex = pdata.sidx;
params.sortDirection = pdata.sord;
$.ajax(
{
type: "POST",
contentType: "application/json; charset=utf-8",
url: "JQGridService.asmx/GetJQGrid",
data: JSON.stringify(params),
dataType: "json",
success: function (data, textStatus)
{
if (textStatus == "success") {
var thegrid = $("#jqGrid")[0];
thegrid.addJSONData(data.d);
}
},
error: function (data, textStatus) {
alert('An error has occured retrieving data!');
}
});
}
function pageLoad() { loadGrid() };
function loadGrid() {
$("#jqGrid").jqGrid({
gridComplete: function() {
$("#jqGrid").setGridParam({ datatype: 'local' });
},
datatype: function (pdata) {
getData(pdata);
},
colNames: ['ID', SomeColumn],
colModel: [
{ name: 'ID', index: 'ID', width: 150 },
{ name: SomeColumn, index: SomeColumn, width: 250}],
rowNum: 10,
rowList: [10, 20, 30],
viewrecords: false,
pagination: true,
pager: "#jqPager",
loadonce: true,
sortorder: "desc",
sortname: 'id',
cellEdit: false
});
}