自定义客户端模板Telerik Grid

时间:2012-10-21 22:52:54

标签: asp.net-mvc-3 razor telerik telerik-grid

我是使用Telerik Grid的新手,基本上我在这里要完成的是以下场景,我有一个表单有一些字段,并通过ajax调用我的控制器上的另一个动作来生成模型到具有以下网格的局部视图,我的问题是我需要根据一些业务逻辑创建一些操作,我知道我可以使用列模板做到这一点,事情就是因为我使用ajax绑定它“松散”我的模板在互联网上四处看看我发现你可以使用js函数来生成链接,我的问题是不是那种凌乱?我在服务器和客户端上复制相同的业务逻辑,必须有更好的方法来实现这一目标吗?

  Html.Telerik().Grid(Model)
      .Name("Grid")
      .DataBinding(binding => binding.Ajax().OperationMode(GridOperationMode.Client))
      .Columns(column =>
      {
          column.Bound(c => c.Id).Title("Id").Width(30);
          column.Bound(c => c.Status);
          column.Bound(c => c.DateReg);
          column.Template(
              @<text>
                   <div class="ActionsProvGrid">
                       <a href="@Url.Action("SomeAction", "Controller", new {id = item.id})">
                           <img src="../../Content/icons/ViewMore.png" alt="ViewMore" />
                       </a>
                       @if (@item.Status.Equals("ACT"))
                       {
                           <a href="@Url.Action("SomeOtherAction", "Controller", new {idOportunidad = item.id})">
                               <img src="../../Content/icons/invoice.png" alt="invoice"/>
                           </a>
                       }

                   </div>                                                      
               </text>
              ).ClientTemplate("<#= GenearteIcons(data)  #>");
      })
    .Sortable()

1 个答案:

答案 0 :(得分:0)

作为一种解决方案,您可以在模型上定义封装业务逻辑结果的属性:

public bool DoesStatusEqualToAct {
  get
  {
    return (code that determines if it's true);
  }
}

在生成链接html的JavaScript函数中,您可以访问此属性:

function GenerateIcons(data){
    var html = '';
    if(data.DoesStatusEqualToAct){
       html = 'version 1';
    }
    else{
       html = 'version 2';
    }
   return html;
}