C# 扩展Telerik客户端模板列并获取传递的值
我使用的是最新版本的Telerik MVC控件。我正在用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
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 <# } #>");