Passing selected rows in a controller in nop Commerce Terilik grid

懵懂的女人 提交于 2019-12-13 07:34:27

问题


I am beginner in using nopCommerce 2.30 (MVC 3 Razor) and Telerik().Grid. I am currently working

on Nop.Admin project.I try to create a Html.Telerik().Grid in my form, with many features.

Please see my grid image below.

These are the features.

  1. grid data should be filter the selected value of the dropdownlist.

  2. all grid columns are enable sorting.

  3. in first column header contains a checkbox,for multiselect.

  4. grid view must enable a column context menu.

Please see my code below.

My .cshtml file

     <td>
        @(Html.Telerik().Grid<NotificationMailReminderModel>()
                    .Name("productvariants-grid")

                    .DataKeys(keys =>
                    {
                        keys.Add(pv => pv.Username);
                    })
                    .DataBinding(dataBinding =>
                        dataBinding.Ajax()
                                .Select("EmailReminderByEvent", "Customer")
                    )
                    .Columns(columns =>
                    {
                        columns.Bound(pv => pv.IsSelected)
                        .ClientTemplate("<input type='checkbox'  name='Id' value='<#= Id #>' />")
                        .HeaderTemplate(@<text><input type="checkbox" title="check all records" id="checkAllRecords" /></text>)
                        .Width(50)

                        .HeaderHtmlAttributes(new { style = "text-align:center" })
                        .HtmlAttributes(new { style = "text-align:center" });
                        columns.Bound(pv => pv.Username).ReadOnly().Width(250);
                        columns.Bound(pv => pv.Firstname).ReadOnly();
                        columns.Bound(pv => pv.Lastname).ReadOnly();
                    })
                            .ClientEvents(events => events.OnDataBinding("Grid_onDataBinding").OnError("Grid_onError").OnSubmitChanges("Grid_onSubmitChanges")
                            .OnRowDataBound("onRowDataBound"))
                    .Editable(editing => editing.Mode(GridEditMode.InCell))
                    .Pageable(settings => settings.PageSize(2).Position(GridPagerPosition.Both))
                    .Sortable(sorting => sorting.Enabled(true))
        )
        <script type="text/javascript">

            $(document).ready(function () {
                $('#search-products').click(function () {
                    var grid = $('#productvariants-grid').data('tGrid');
                    grid.currentPage = 1; //new search. Set page size to 1
                    grid.ajaxRequest();
                    return false;
                });
                $('#send-mail-reminder').click(function () {
                    var grid = $('#productvariants-grid').data('tGrid');
                    grid.ajaxRequest();
                    return false;
                });

                $('#grdCustomerEventRoleData #productvariants-grid table thead #checkAllRecords').click(function () {
                    $("#grdCustomerEventRoleData #productvariants-grid table tbody input:checkbox").attr("checked", this.checked);
                });
            });

            function Grid_onError(args) {
                if (args.textStatus == "modelstateerror" && args.modelState) {
                    var message = "Errors:\n";
                    $.each(args.modelState, function (key, value) {
                        if ('errors' in value) {
                            $.each(value.errors, function () {
                                message += this + "\n";
                            });
                        }
                    });
                    args.preventDefault();
                    alert(message);
                }
            }

            function Grid_onDataBinding(e) {
                var loadData = true;
                var grid = $(this).data('tGrid');

                if (loadData) {
                    var searchModel = {
                        Event: $('#select-event').val()
                    };
                    e.data = searchModel;
                }
            }

            function Grid_onSubmitChanges(e) {
                //TODO pass current search parameters

                //we can't pass search parameters in submit changes
                //that's why let's just clear search params
                //$('#@Html.FieldIdFor(model => model.Event)').val('');
                //$('#SearchCategoryId').val('0');
                //$('#SearchManufacturerId').val('0');
            }
        </script>
    </td>

My Controller actions

  public ActionResult EmailReminder()
    {
        if (!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers))
            return AccessDeniedView();

        var model = new NotificationMailReminderModels();

        model.Event = 0;

        List<Nop.Core.Domain.Catalog.Product> products = _productRepository.Table.Where(p => p.EventDate != null && p.EventDate >= DateTime.MinValue).OrderBy(o => o.Name).ToList();


        model.Events = products.Select(p => new System.Web.Mvc.SelectListItem
        {
            Text = p.Name.Trim(),
            Value = p.Id.ToString()
        }).ToList();

        return View(model);
    }

[HttpPost, GridAction(EnableCustomBinding = true)] public ActionResult EmailReminderByEvent(int[] Id, GridCommand command, NotificationMailReminderModels model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers)) return AccessDeniedView();

        var gridModel = new GridModel();

        string vwSlEv = ViewBag.SelectedEvent;
        int selevent = 0;
        if (!string.IsNullOrEmpty(vwSlEv))
        {
            Int32.TryParse(vwSlEv, out selevent);
        }
        else
        {
            selevent = model.Event;
        }

        var csts = _customerEventRoleRepository.Table.Where(e => e.EventId == selevent).Select(cs => cs.CustomerId).Distinct().ToArray();

        var customers = _customerRepository.Table.Where(c => !string.IsNullOrEmpty(c.Username) && !string.IsNullOrEmpty(c.Email) && csts.Contains(c.Id)).ToList();

        var gridmodel = customers.Select(x =>
        {
            NotificationMailReminderModel not = new NotificationMailReminderModel();
            not.Id = x.Id;
            not.Username = x.Username;
            not.Firstname = x.CustomerAttributes.FirstName;
            not.Lastname = x.CustomerAttributes.LastName;

            return not;
        });



        var grddata = new PagedList<NotificationMailReminderModel>(gridmodel.ToList(), command.Page - 1, command.PageSize);

        gridModel.Data = grddata;

        gridModel.Total = grddata.TotalCount;

        return new JsonResult
        {
            Data = gridModel
        };
    }

data grid sorting and filtering works fine in my grid. But i can't get the ContextMenu

function in the Razor intellisence.

I want to passing the selected rows to the Controller POST function.

But, How to pass the selected rows in to the controller function.

please help.


回答1:


But, How to pass the selected rows in to the controller function.

JQuery (Sample Code)

var MyConnectionList = {
    ColorList: []
};

function SendStream() {
    debugger;

    MyConnectionList.ColorList.push({
        "Name": 'Test1',
        "Color": 'red'
    });

    MyConnectionList.ColorList.push({
        "Name": 'Test2',
        "Color": 'Green'
    });

    $.ajax({
        url: "Ur url",
        data: JSON.stringify(MyConnectionList),
        type: 'POST',
        contentType: 'application/json',
        dataType: 'json',
        success: function (data) { }
    });
}

Action Method

public ActionResult SendStream(List<Sample> ColorList)
{
}


来源:https://stackoverflow.com/questions/15968127/passing-selected-rows-in-a-controller-in-nop-commerce-terilik-grid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!