简体   繁体   中英

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.

Partial view (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(); . Instead you should bind to your whole list and then set the default option with .Value("1") so that it has "Images" by default.

@(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

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. You would not have to add the .ToClientTemplate() or the script tags. You would reference it by the file name. You could then use the template on multiple pages in the project.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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