Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展Telerik客户端模板列并获取传递的值_C#_Asp.net Mvc_Linq_Asp.net Mvc 3_Telerik - Fatal编程技术网

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

C# 扩展Telerik客户端模板列并获取传递的值,c#,asp.net-mvc,linq,asp.net-mvc-3,telerik,C#,Asp.net Mvc,Linq,Asp.net Mvc 3,Telerik,我使用的是最新版本的Telerik MVC控件。我正在用ASP.netmvc3和razor一起使用 我有一个表格,列出了我所有的助学金申请。我想使用一个网格,通过AJAX加载这些grant应用程序。我还需要创建一个具有操作链接的客户端模板列。这些行动链接可能因每个赠款申请的状态而异 我在:。我按原样实现了代码,它可以工作,我可以创建一个包含链接的客户机模板列。在我的场景中,我需要能够将2个参数传递给helper方法,如: column.ActionLink("Open", "Edit", "Gr

我使用的是最新版本的Telerik MVC控件。我正在用
ASP.netmvc3
razor
一起使用

我有一个表格,列出了我所有的助学金申请。我想使用一个网格,通过AJAX加载这些grant应用程序。我还需要创建一个具有操作链接的客户端模板列。这些行动链接可能因每个赠款申请的状态而异

我在:。我按原样实现了代码,它可以工作,我可以创建一个包含链接的客户机模板列。在我的场景中,我需要能够将2个参数传递给helper方法,如:

column.ActionLink("Open", "Edit", "GrantApplication", item => new { id = item.Id, applicationStateId = item.GrantApplicationStateType.Id });
我最终实现这个方法的方式将会改变,但是现在我正在使用这两个输入参数来查看它们是如何传递的,以及如何在helper方法中检索它们

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

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);
});
当第二个参数值进入if语句的false部分时,此处失败:

value = GetValue(memberExpression);
…并给出以下错误消息,我不知道它是什么:

variable 'item' of type MyProject.ViewModels.GrantApplicationListViewModel' referenced from scope '', but it is not defined
以下是我的视图模型:

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; }
}
以下是我视图中的部分网格声明:

@(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" })
)

我将如何做上述工作?那篇文章中的代码是唯一的方法吗?难道没有更简单的方法吗?我用谷歌搜索,但在我想做的事情上找不到太多帮助。还有其他人遇到过类似的情况吗?

如果您只希望客户端模板根据应用程序id显示不同的内容,那么只需在客户端模板中添加一个条件就可以了

column.Bound(x => x.Id)
  .ClientTemplate("<# if (Id == 1 ) { #> Edit Link and View Link <# } else { #> Details Link <# } #>");
column.Bound(x=>x.Id)
.ClientTemplate(“编辑链接和查看链接详细信息链接”);

“编辑”、“查看”和“详细信息”链接的放置方式与无条件链接的放置方式相同。

这只是部分if语句,我需要进行大约10次检查,每次检查显示一组不同的链接。因此,我想将其移动到帮助器,否则视图看起来会很混乱。我同意,如果没有帮助器,10次检查会变得很混乱。您可以将链接或链接集存储到每个项目中,这样您就不必打开Id了吗?我决定按照您的方式行事。我只是把它放到我自己的助手方法中。然后,它将所有的if语句都从视图中删除。我对类似的情况有异议。我需要显示一个href。但只有我得到了当前值,它被限制在列上。我如何才能实现多重价值?
if grant application id  = 1

     then return Edit link and View link

else

     then return Details link
column.Bound(x => x.Id)
  .ClientTemplate("<# if (Id == 1 ) { #> Edit Link and View Link <# } else { #> Details Link <# } #>");