简体   繁体   English

剑道网格中的dropdownlist不起作用

[英]dropdownlist in kendo grid not working

Im trying to use incell editing and use of the http://demos.telerik.com/aspnet-mvc/grid/editing-custom but is can't find my partial view that the dropdownlist should be rendered from. 我正在尝试使用单元格编辑和http://demos.telerik.com/aspnet-mvc/grid/editing-custom的使用,但是找不到我的部分观点,即应该从下拉菜单中进行渲染。

Partial view (Testview.cshtml) 局部视图(Testview.cshtml)

   @using Kendo.Mvc.UI

 @(Html.Kendo().DropDownList()
        .Name("ResourceType") // Name of the widget should be the same as the name of the property
.DataValueField("Id") // The value of the dropdown is taken from the EmployeeID property
.DataTextField("Name") // The text of the items is taken from the EmployeeName property
    .BindTo((System.Collections.IEnumerable)ViewData["defaultResourceType"]) // A list     of all employees which is populated in the controller

)

This is my grid: 这是我的网格:

  @(Html.Kendo().Grid<RMS.Admin.ViewModel>()
  .Name("ResourceGrid")
  .Columns(columns =>
  {
      columns.Bound(c => c.ResourceId).Hidden();
      columns.Bound(c => c.ResourceName);
      columns.Bound(c => c.Descritption);
      columns.Bound(c => c.ResourceType.Name).ClientTemplate("#=ResourceType.Name#");
      columns.Bound(c => c.Approved);
      columns.Bound(c => c.IsEnabled);
      columns.Command(command =>
      {
          command.Edit();
          command.Destroy();
      }).Width(172).Title("Edit/Delete");
  })
  .ToolBar(toolbar => toolbar.Create())
  .Editable(editable => editable.Mode(GridEditMode.InCell))
  .Scrollable()
  .Sortable()
  .Pageable(pageable => pageable
      .Refresh(true)
      .PageSizes(true)
      .ButtonCount(5))
  .DataSource(dataSource => dataSource
      .Ajax()
      .Model(model =>
      {
          model.Id(s => s.ResourceId);
          model.Field(s => s.ResourceType).DefaultValue(ViewData["defaultResourceType"] as RMS.Admin.ViewModel.ResourceTypeId);
      })
      .Create(update => update.Action("CreateResource", "Home"))
            .Read(read => read.Action("ReadResource", "Home"))
            .Update(update => update.Action("SaveSystem", "Home"))
            .Destroy(destroy => destroy.Action("RemoveSystem", "Home"))
    )

)

Here is a part of my model: 这是我的模型的一部分:

  public string ResourceUserId { get; set; }
    [UIHint("Testview")]
    public ResourceTypeId ResourceType { get; set; }

This is in my controller where i bind the data: 这是在我绑定数据的控制器中:

    private void GetResourceTypeId()
    {
        //string [] list = new string[]{"Image", "Document", "Other"};
        IList<ViewModel.ResourceTypeId> list = new List<ViewModel.ResourceTypeId>();

        var a = new ViewModel.ResourceTypeId
        {
            Name = "Image",
            Id = 1
        };
        var b = new ViewModel.ResourceTypeId
        {
            Name = "Document",
            Id = 2
        };
        var c = new ViewModel.ResourceTypeId
        {
            Name = "Other",
            Id = 3
        };

        list.Add(a);
        list.Add(b);
        list.Add(c);
        ViewData["defaultResourceType"] = list.First();    
    }

I get this error when trying to render the grid: The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. 在尝试渲染网格时出现此错误:您正在寻找的资源(或其依赖项之一)可能已被删除,名称更改或暂时不可用。 Please review the following URL and make sure that it is spelled correctly. 请查看以下网址,并确保其拼写正确。

What am i missing? 我想念什么?

First off your trying to bind just to one item with ViewData["defaultResourceType"] = list.First(); 首先,您尝试使用ViewData["defaultResourceType"] = list.First();仅绑定到一个项目ViewData["defaultResourceType"] = list.First(); . Instead you should bind to your whole list and then set the default option with .Value("1") so that it has "Images" by default. 相反,您应该绑定到整个列表,然后使用.Value("1")设置默认选项,以便默认情况下具有“图像”。

@(Html.Kendo().DropDownList()
  .Name("ResourceType") 
  .DataValueField("Id")
  .DataTextField("Name")
  .BindTo((System.Collections.IEnumerable)ViewData["ResourceTypeList"])
  .Value(ViewData["DefaultResourceType"])
);

Also for a template for a column in MVC you may just want to set it with EditorTemplateName 同样对于MVC中列的模板,您可能只想使用EditorTemplateName进行设置

columns.Bound(e => e.myColumn).EditorTemplateName("dropdownTemplate")

And then define the template that you want to use somewhere else on the page. 然后在页面上的其他地方定义要使用的模板。

<script id="dropdownTemplate" type="text/x-kendo-template">
  @(Html.Kendo().DropDownList()
    .Name("myDropDown")
    .....
    .ToClientTemplate()
  )
</script>


If you would like you can also declare it as a stand alone template in your /Views/Shared/ folder. 如果您愿意,也可以在/ Views / Shared /文件夹中将其声明为独立模板。 You would not have to add the .ToClientTemplate() or the script tags. 您不必添加.ToClientTemplate()或脚本标签。 You would reference it by the file name. 您可以通过文件名来引用它。 You could then use the template on multiple pages in the project. 然后,您可以在项目的多个页面上使用模板。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM