Не работает выпадающий список кендо

Я хочу добавить выпадающий список поверх моей сетки. Но это не работает правильно. мне нужно выбрать элемент из выпадающего меню и заполнить остальные детали для выбранного элемента в сетке, но я получаю:

  **The parameters dictionary contains a null entry for parameter 'itemIDFilter' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult _BinCard(Kendo.Mvc.UI.DataSourceRequest, Int32)' in X.Controllers.ItemsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
    Parameter name: parameters**

контроллер:

public ActionResult _ItemDropdown([DataSourceRequest] DataSourceRequest request)
      {
          //
         var data = ReportEngineHelper.GetReportingEngine(Session).Generate<ItemDropDownQuery>().ToQueryModel<ItemDropDownModel>();
         return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
      }




  public ActionResult _BinCard([DataSourceRequest] DataSourceRequest request, int itemIDFilter)
            {
                var data = ReportEngineHelper.GetReportingEngine(Session).Generate<BinCardQuery>(new Filter()
                {
                   Item  = new Item(){ItemID = itemIDFilter}
                }).ToQueryModel<BinCard>();
                return Json(data.ToDataSourceResult(request));
            }

Посмотреть:

    @using HCMIS.Dashboard.Core.Models.Items
@using Kendo.Mvc.UI

<table>
    <tr>
        <td> Item : </td>

        <td>
            @( 
    Html.Kendo().DropDownList() 
        .Name("Itemdropdownlist") 
        .DataTextField("FullItemName") 
        .DataValueField("ItemID") 
        .DataSource(source => source.Read(read => read.Action("_ItemDropdown", "Items"))) 
        .OptionLabel("Select an Item") ) 
        </td>
        <td>
            <img src="/Content/Images/go.png" valign="top" onclick="loadGrid('BinCardGrd', false)" alt="Go" title="Go" style="width:20px;height:18px;margin-top:2px" />
        </td>
    </tr>
</table>

@(
 Html.Kendo().Grid<BinCard>()
    .Name("BinCardGrd")
    .AutoBind(false)
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("_BinCard", "Items").Data("readItemIdFilter")))

        .Columns(columns =>
        {
            columns.Bound(c => c.Item).Width(550);
            columns.Bound(c => c.Unit).Width(100);
            columns.Bound(c => c.dateFormat).Title("Date").Width(200);
            columns.Bound(c => c.InvoiceNo).Title("No.").Width(200);
            columns.Bound(c => c.Received).Width(200);
            columns.Bound(c => c.Issued).Width(200);
            columns.Bound(c => c.SupplierTo).Title("Supplier/To").Width(200);
            columns.Bound(c => c.Quantity).Title("Quantity").Width(200);
            columns.Bound(c => c.Balance).Title("Balance").Width(200);
        }
    )
  .Sortable()

      )




<script>function readItemIdFilter() {
    var IID = $("#Itemdropdownlist").data("kendoDropDownList");
 return {
        itemIDFilter: (IID.dataValueField)
    };
} </script>

модель:

   public class ItemDropDownModel
    {
        public int ItemID{ get; set; }
        public string FullItemName { get; set; }
        public string ItemWithCommodityType { get; set; }

    }

BinCardQuery:

public override string Generate()
        {


     QueryString = string.Format(@"`

        Select FullItemName Item,`
         Unit, GRNFDate [Date], Supplier,  Null InvoiceNo, Received, Issued, 
           SUM(IsNull(Received,0) - IsNull(Issued, 0)) 
           OVER (ORDER BY RowNumber asc) As Balance
            From Transactions.StockOnHandBase 
           where EnvironmentID = {0} and  itemid = {1}
     ", EnvironmentID, Item.ItemID);
                return QueryString;
            }

        public Item Item { get; set; }

1 ответ

Пожалуйста, попробуйте с приведенным ниже фрагментом кода.

ПОСМОТРЕТЬ

@( 
Html.Kendo().DropDownList()
    .Name("Itemdropdownlist")
    .DataTextField("FullItemName")
    .DataValueField("ItemID")
    .DataSource(source => source.Read(read => read.Action("_ItemDropdown", "Home")))
    .OptionLabel("Select an Item")) 

КОНТРОЛЛЕР

public JsonResult _ItemDropdown()
{
    List<ItemDropDownModel> lst = new List<ItemDropDownModel>();

    lst.Add(new ItemDropDownModel() { ItemID = 1, FullItemName = "1", ItemWithCommodityType = "1" });
    lst.Add(new ItemDropDownModel() { ItemID = 11, FullItemName = "11", ItemWithCommodityType = "11" });
    lst.Add(new ItemDropDownModel() { ItemID = 111, FullItemName = "111", ItemWithCommodityType = "111" });

    return Json(lst, JsonRequestBehavior.AllowGet);
}

Кроме того, я также обновил код вашего контроллера.

    public JsonResult _ItemDropdown()
    {
        var data = ReportEngineHelper.GetReportingEngine(Session).Generate<ItemDropDownQuery>().ToQueryModel<ItemDropDownModel>();
        return Json(data, JsonRequestBehavior.AllowGet);
    }

Дайте мне знать, если что-то беспокоит.

Обновление 1:

ПОСМОТРЕТЬ

@( 
 Html.Kendo().DropDownList()
        .Name("Itemdropdownlist")
        .DataTextField("FullItemName")
        .DataValueField("ItemID")
        .DataSource(source => source.Read(read => read.Action("_ItemDropdown", "Home")))
        .OptionLabel("Select an Item")
        .Events(e =>
            {
                e.Change("onChanges");
            })
        )
<br />
@(
 Html.Kendo().Grid<MvcApplication1.Models.BinCard>()
    .Name("BinCardGrd")
    .AutoBind(false)
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("_BinCard", "Home").Data("readItemIdFilter")))

        .Columns(columns =>
        {
            columns.Bound(c => c.Item).Width(550);
            columns.Bound(c => c.Unit).Width(100);
        }
    )
  .Sortable()

      )

<script>
    function readItemIdFilter() {

        var IID = $("#Itemdropdownlist").data("kendoDropDownList");

        var ddvalue = 0;
        debugger;
        if (IID.dataItem() && IID.dataItem().ItemID) {
            ddvalue = IID.dataItem().ItemID;
        }
        return {
            itemIDFilter: ddvalue
        };
    }

    function onChanges(e) {
        $('#BinCardGrd').data('kendoGrid').dataSource.read();
        $('#BinCardGrd').data('kendoGrid').refresh();
    }

</script>

КОНТРОЛЛЕР

public JsonResult _ItemDropdown()
{
    List<ItemDropDownModel> lst = new List<ItemDropDownModel>();

    lst.Add(new ItemDropDownModel() { ItemID = 1, FullItemName = "1", ItemWithCommodityType = "1" });
    lst.Add(new ItemDropDownModel() { ItemID = 11, FullItemName = "11", ItemWithCommodityType = "11" });
    lst.Add(new ItemDropDownModel() { ItemID = 111, FullItemName = "111", ItemWithCommodityType = "111" });

    return Json(lst, JsonRequestBehavior.AllowGet);
}

public ActionResult _BinCard([DataSourceRequest] DataSourceRequest request, int itemIDFilter)
{
    List<BinCard> lst = new List<BinCard>();
    lst.Add(new BinCard() { Item = "2", Unit = itemIDFilter.ToString() });
    lst.Add(new BinCard() { Item = "22", Unit = itemIDFilter.ToString() });
    lst.Add(new BinCard() { Item = "222", Unit = itemIDFilter.ToString() });

    return Json(lst.ToDataSourceResult(request));
}
Другие вопросы по тегам