2012-02-06 64 views
0

我需要在ASP.NET MVC应用程序中使用jQuery通过Ajax调用获取的JSON数据绑定网格。但对于每一列,我希望能够定义一个模板(类似于WebForm中的GridView控件中的TemplateField)。该模板就像列定义一样,并完全控制在该列中显示的内容。哪个网格控件支持这个?我认为jQGrid,DataTable和SlickGrid是用于客户端数据绑定的流行的基于jQuery的网格控件。对网格中的一个或多个列执行具有自定义模板的任何支持?我找到了一个link,它显示了如何将JSON数据绑定到客户端的网格,但没有关于如何为每列定义模板的信息。ASP.NET MVC 3中的jQuery网格控件的客户端模板列3

回答

1

在jqgrid中,你可以有一个自定义的格式化函数,在那里你将返回给定的列上使用的html字符串模板(http://www.trirand.com/jqgridwiki/doku.php?id=wiki :custom_formatter)。 在Datatable(也包含jqGrid)中,可以从现有元素创建网格。在这种情况下,您可以在剃须刀中使用@foreach语句创建表格,并在单元格内应用模板。

实施例使用的jqGrid自定义格式和jQuery模板:

// Your cell template 
<script id="MyColumnTemplate" type="text/x-jquery-tmpl"> 
    <h1>${Name}</h1> 
</script> 


<script> 

// creating the grid passing the formating function 
$('#GridView').jqGrid({ 
    (...) 
    colModel: [   
    { name: 'Custom', formatter: myFormatter}, ...], 
    }); 
}); 

function myFormatter(cellvalue, options, rowObject) { 
    var data = { Name: 'Test' }; 
    // applying the jquery template and returning html output 
    return $('#MyColumnTemplate').tmpl(data).html(); 
} 

</script> 
+0

感谢。我更喜欢第二种选择,即在剃刀中定义模板比在Javascript中定义模板。但我可以这样做客户端绑定?我的意思是我可以将一个JSON对象集合绑定到Javascript中的网格,并且仍然能够在剃刀中定义网格模板?你能分享一些关于如何做到这一点的例子吗?我花了很长时间寻找这个,但找不到那样的东西。 – RKP 2012-02-06 18:07:29

+0

我不想在Javascript中定义我的模板的主要原因是因为它使用HTML的字符串连接,并且很容易出错,而不是一种干净的方式来定义模板。 – RKP 2012-02-06 18:09:21

+0

您可以创建一个仅定义模板的局部视图,在那里使用razor并使用ajax get调用来检索它。但我认为这会更复杂,所以我建议使用自定义格式化方法。 – 2012-02-06 18:16:26