【问题标题】:How to use ViewBag in Kendo Grid ClientTemplate's If condition如何在 Kendo Grid ClientTemplate 的 If 条件中使用 ViewBag
【发布时间】:2018-12-25 05:25:56
【问题描述】:

我正在将一些 ID 加载到 ViewBag 以在相关视图中使用它的数据。

var userAccountList =serviceResponse.RoleList.Select(x => x.RoleId).ToList();
ViewBag.UserRoles = userAccountList;

这个结果是List<string>

在视图中,Kendo Grid 从 json 检索数据。

@(Html.Kendo().Grid<RoleModel>().Name("KendoGrid").Scrollable().Columns(columns =>
 {
        columns.Bound(x => x.Id)
            .HtmlAttributes(new { style = "text-align:center;"})
            .ClientTemplate("# if ( Id != '3'){
                #<a class='k-button' href=\"/Role/Delete/#= Id #\"><span class='k-icon k-delete' style='pointer-events: none;'></span>Delete</a># }#")
            .Width(85).Sortable(false)
            .Hidden(!((BaseController)this.ViewContext.Controller).UserHasPermission(PermissionType.RoleDelete));
        columns.Bound(x => x.Name);

....
 }

当我使用'3' 等静态值时,我可以阻止显示用作删除按钮的a 标记。如果列表包含绑定到列的Id,我如何在此条件中使用ViewBag.UserRoles

【问题讨论】:

  • 我所做的是将值从控制器传递到视图的模型。然后添加一个隐藏输入(HiddenFor)。现在您可以创建一个返回 $('#myHidden').val() 的 jquery 函数,例如 GetId。然后# if ( Id != GetId())...
  • 谢谢。你说的方式正是我想要的。

标签: asp.net-mvc kendo-grid kendo-asp.net-mvc


【解决方案1】:

通常要使用 Razor,您必须执行类似的操作

.ClientTemplate("# if ( Id != "'+ @ViewBag.UserRole +'")

如果我们谈论的是一个字符串值。 现在,对于您的情况,您可以使用 Template 而不是 ClientTemplate 像这样

.Template(
    @<text>
         @if (ViewBag.UserRoles.Any(u => u == item.Id))
         {
            ... add your link
         }
   </text>

您可以在post 中找到更多示例。 很可能它也有文档,因为我目前找不到我要找的东西。

【讨论】:

  • 调用一个js函数就搞定了。我有一个有点复杂的客户端和标题模板,所以我不喜欢这样的方式。我稍后会尝试这个以获得更简单的示例。谢谢解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多