首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Telerik客户端模板列并获取传递的值

扩展Telerik客户端模板列并获取传递的值
EN

Stack Overflow用户
提问于 2012-02-07 17:30:00
回答 1查看 5.3K关注 0票数 2

我使用的是最新版本的Telerik MVC controls。我在razor中使用ASP.NET MVC 3

我有一个表格,上面列出了我所有的拨款申请。我想使用一个网格,通过AJAX加载这些授权应用程序。我还需要创建一个包含操作链接的客户端模板列。这些操作链接可以根据每个授权申请的状态而有所不同。

我在http://gedgei.wordpress.com/2011/07/02/telerik-mvc-grid-actionlink-column/上阅读了这篇文章。我按原样实现了代码,它可以工作,我可以创建一个带有链接的客户端模板列。在我的场景中,我需要能够向helper方法传递两个参数,例如:

代码语言:javascript
复制
column.ActionLink("Open", "Edit", "GrantApplication", item => new { id = item.Id, applicationStateId = item.GrantApplicationStateType.Id });

我最终如何实现这个方法将会改变,但现在我尝试使用这两个输入参数,看看它们是如何传递的,以及如何在helper方法中检索它们。

关于这篇文章,我的第一个问题是,为什么作者会这样做:

代码语言:javascript
复制
var builder = factory.Template(x =>
{
     var actionUrl = urlHelper.Action(action, controller, routeValues.Compile().Invoke(x));

     return string.Format(@"<a href=""{0}"">{1}</a>", actionUrl, linkText);
});

我只能假设这是创建的服务器端模板?但是网格中什么也没有显示,那么我如何跳过这一部分,直接转到客户端模板(这才是我真正需要的)。

下面的部分也令人困惑,因为当第一个参数(id)检查通过时,它是ParameterExpression类型的,因此它进入if的true部分,但当第二个参数(grant application state id)进入时,它是另一个类型(不确定是什么),所以它进入if语句的false部分:

代码语言:javascript
复制
switch (argument.NodeType)
{
     case ExpressionType.Constant:
          value = ((ConstantExpression)argument).Value;
          break;

     case ExpressionType.MemberAccess:
          MemberExpression memberExpression = (MemberExpression)argument;

          if (memberExpression.Expression is ParameterExpression)
               value = string.Format("<#= {0} #>", memberExpression.Member.Name);
          else
               value = GetValue(memberExpression);

          break;

     default:
          throw new InvalidOperationException("Unknown expression type!");
}

当第二个参数值进入if语句的false部分时,它将失败:

代码语言:javascript
复制
value = GetValue(memberExpression);

..and给出了以下错误消息,我不知道这是什么:

代码语言:javascript
复制
variable 'item' of type MyProject.ViewModels.GrantApplicationListViewModel' referenced from scope '', but it is not defined

这是我的视图模型:

代码语言:javascript
复制
public class GrantApplicationListViewModel
{
     public int Id { get; set; }
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public string FullNameDisplay
     {
          get { return FirstName + " " + LastName; }
     }

     public DateTime CreatedDate { get; set; }

     public GrantApplicationStateType GrantApplicationStateType { get; set; }
}

下面是我在视图中的部分网格声明:

代码语言:javascript
复制
@(Html.Telerik()
     .Grid<GrantApplicationListViewModel>()
     .Name("grdGrantApplications")
     .Columns(column =>
     {
          column.Bound(x => x.Id)
               .ClientTemplate(
                    "<label class=\"reference-number\"><a href=\"" + @Url.RouteUrl(Url.GrantApplicationDetails("<#= Id #>")) + "\">" + "<#= Id #>" + "</a></label>"
               )
               .Title("Ref #")
               .Width(70);

          column.Bound(x => x.FullNameDisplay)
               .Title("Owner")
               .Width(200);

          column.Bound(x => x.GrantApplicationStateType.Name)
               .Title("Status")
               .Width(90);

          //column.ActionLink("Edit", "Edit", "GrantApplication", item => new { id = item.Id });

          column.ActionLink("Open", "Edit", "GrantApplication", item => new { id = item.Id, applicationStateId = item.GrantApplicationStateType.Id });
     })
     .DataBinding(dataBinding => dataBinding.Ajax().Select("AjaxGrantApplicationsBinding", "Home"))
     .Pageable(paging => paging.PageSize(30))
     .TableHtmlAttributes(new { @class = "telerik-grid" })
)

我试图通过上面的代码实现的效果是:

代码语言:javascript
复制
if grant application id  = 1

     then return Edit link and View link

else

     then return Details link

我该如何做以上的事情呢?那篇文章中的代码是唯一的方法吗?有没有更简单的方法?我在谷歌上找不到关于我想要做什么的帮助。有没有其他人遇到过这样的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-08 00:46:13

如果您只想让客户端模板根据应用程序id显示不同的内容,那么只需在客户端模板中添加一个条件会更简单。

代码语言:javascript
复制
column.Bound(x => x.Id)
  .ClientTemplate("<# if (Id == 1 ) { #> Edit Link and View Link <# } else { #> Details Link <# } #>");

Edit、View和Details链接的放置方式与它们放入的方式相同,不带条件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9173809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档