简体   繁体   English

Kendo UI DetailTemplate网格数据源在控制器中未读取动作

[英]Kendo UI DetailTemplate grid datasource read not fire action in controller

I'm using hierarchical grid, I bind parent grid but the hierarchical grid is not binding on load, it's shows empty nor controller action method fire associated against hierarchical grid datasource read method. 我正在使用层次结构网格,我绑定了父网格,但是层次结构网格在负载时未绑定,它显示了与层次结构网格数据源读取方法相关联的空或控制器操作方法。 My view is as 我的看法是

   @(Html.Kendo().Grid<Cubes.UI.Models.PatientAppointmentInfoModel>()
     .Name("PatientAppointmentGrid")
     .DataSource(dataSource => dataSource
          .Ajax()                                                   
          .PageSize(Cubes.Common.Constants.GridPageSize)
          .Read(read => read.Action("_SearchPatientAppointment", "PatientAppointment"))
     )
     .Columns(columns =>
     {
         columns.Bound(m => m.AppointmentID).Title("Appointment #");
         columns.Bound(m => m.StartTime).Title("Start Time").Width(100);
         columns.Bound(m => m.EndTime).Title("End Time");
         columns.Bound(m => m.AppointmentDate).Format("{0:d}").Title("Appointment Date");
         columns.Bound(m => m.FirstName).Title("First Name");
         columns.Bound(m => m.LastName).Title("Last Name");
         columns.Bound(m => m.Amount).Title("Amount");
     })
     .Selectable(selectable => selectable.Mode(GridSelectionMode.Single))
     .Pageable()
     .Sortable()
     .Scrollable()
     .ClientDetailTemplateId("template")
     .Resizable(resize => resize.Columns(true))
     .Events(events =>              
         events.DataBound("OnDataBoundPatientAppointmentGrid"))
     )

and detail template is as below 详细模板如下

<script id="template" type="text/kendo-tmpl">
    @(Html.Kendo().Grid<Cubes.UI.Models.PatientAppointmentInfoModel>()
        .Name("Grid_#=AppointmentID#")
        .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(Cubes.Common.Constants.GridPageSize)
            .Read(read => read.Action("HierarchyBinding_Appointments", "PatientAppointment", new { appointmentID = "#=AppointmentID#" }))
         )
         .Columns(columns =>
         {
             columns.Bound(t => t.AppointmentID).Title("Appoitnet_#=AppointmentID#");
             columns.Bound(t => t.StartTime).Width(100);
             columns.Bound(t => t.EndTime);
             columns.Bound(t => t.AppointmentDate).Format("{0:d}").Title("Appointment Date");
             columns.Bound(t => t.FirstName);
             columns.Bound(t => t.LastName);
             columns.Bound(t => t.Amount);
          })
          .Selectable(selectable => selectable.Mode(GridSelectionMode.Single))
          .Pageable()
          .Sortable()
          .Resizable(resize => resize.Columns(true))
          .ToClientTemplate()
    )
</script>

action method in controller is as below 控制器中的动作方法如下

 public ActionResult HierarchyBinding_Appointments( [DataSourceRequest]DataSourceRequest request,string appointmentID, string searchKey, string columnNameToSort, string defaultSortOrder, string Mobile, PatientAppointmentInfoModel model)
    {
        //model.Mobile = Mobile;
        var filter = BuildSearchDescriptor(model);
        if (filter != null)
        {
            IList<IFilterDescriptor> filters = new List<IFilterDescriptor>();
            filters.Add(filter);
            request.Filters = filters;
        }

        var roles = GetPatientAppointmentsForChild(Convert.ToInt32(appointmentID),request);

        var result = new DataSourceResult
        {
            Data = roles.Results,
            Total = roles.RowCount


        };
        return Json(result, JsonRequestBehavior.AllowGet);

    }

Problem 问题

Detail Grid just passes new { appointmentID = "#=AppointmentID#" } but action method HierarchyBinding_Appointments has too many parameters - appointmentID, searchKey and so on. Detail Grid只是传递了new { appointmentID = "#=AppointmentID#" }但是操作方法HierarchyBinding_Appointments参数太多-约会ID,searchKey等。

Solution

You need to pass additional data either using object routes values or JavaScript function. 您需要使用对象路由值或JavaScript函数传递其他数据。

Here is the example for JavaScript function. 这是JavaScript函数的示例。

.Read(read => read
   .Action("HierarchyBinding_Appointments",  "PatientAppointment")
   .Data("patientAppointmentData(#=AppointmentID#"))

<script type="text/javascript">
   function patientAppointmentData(AppointmentID) {
      return {
         appointmentID: AppointmentID, 
         searchKey: xxx, 
         columnNameToSort: xxx, 
         defaultSortOrder: xxx, 
         Mobile: xxx 
      };
   }
</script>

Action Method 行动方法

public ActionResult HierarchyBinding_Appointments( 
   [DataSourceRequest]DataSourceRequest request, 
   MyModel model)
{
}

View Model 查看模型

public class MyModel 
{
   public xxx AppointmentID { get; set; } 
   public xxx SearchKey { get; set; } 
   public xxx ColumnNameToSort { get; set; } 
   public xxx DefaultSortOrder { get; set; } 
   public xxx Mobile { get; set; } 
}

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

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