在NOP商务部Terilik网格控制器传递所选行 [英] Passing selected rows in a controller in nop Commerce Terilik grid

查看:262
本文介绍了在NOP商务部Terilik网格控制器传递所选行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是初学者使用nopCommerce 2.30(MVC 3剃须刀)和Telerik的()。网格。我目前的工作

在Nop.Admin project.I尝试在我的表单创建Html.Telerik()电网,具有许多功能。

请参见下面的我格的形象。

这些功能。


  1. 网格数据应该是过滤的dropdownlist的选择的值。


  2. 所有网格列都启动排序。


  3. 在第一个列标题中包含一个复选框,为多选。


  4. 网格视图必须启用列上下文菜单。


请看看我下面code。

我的.cshtml文件

 < TD>
        @(Html.Telerik()网格和LT; NotificationMailReminderModel>()
                    。名称(productvariants网)                    .DataKeys(键=>
                    {
                        keys.Add(PV => pv.Username);
                    })
                    .DataBinding(数据绑定= GT;
                        dataBinding.Ajax()
                                。选择(EmailReminderByEvent,客户)
                    )
                    .Columns(列=>
                    {
                        columns.Bound(PV => pv.IsSelected)
                        .ClientTemplate(<输入类型=复选框名称='ID'值='<#=编号>/>中)
                        .HeaderTemplate(@<文本><输入类型=复选框称号=检查所有记录ID =checkAllRecords/>< /文本>)
                        .WIDTH(50)                        .HeaderHtmlAttributes(新{风格=文本对齐:中心})
                        .HtmlAttributes(新{风格=文本对齐:中心});
                        columns.Bound(PV => pv.Username).ReadOnly()宽(250)。
                        columns.Bound(PV => pv.Firstname).ReadOnly();
                        columns.Bound(PV => pv.Lastname).ReadOnly();
                    })
                            .ClientEvents(事件=> events.OnDataBinding(\"Grid_onDataBinding\").OnError(\"Grid_onError\").OnSubmitChanges(\"Grid_onSubmitChanges\")
                            .OnRowDataBound(onRowDataBound))
                    .Editable(编辑= GT; editing.Mode(GridEditMode.InCell))
                    .Pageable(设置=> settings.PageSize(2).POSITION(GridPagerPosition.Both))
                    .Sortable(排序= GT; sorting.Enabled(真))
        )
        <脚本类型=文/ JavaScript的>            $(文件)。就绪(函数(){
                $('#搜索产品')。点击(函数(){
                    VAR电网= $('#productvariants网)的数据(tGrid')。
                    grid.currentPage = 1; //新的搜索。设置页面大小为1
                    grid.ajaxRequest();
                    返回false;
                });
                $('#发送邮件提醒,')。点击(函数(){
                    VAR电网= $('#productvariants网)的数据(tGrid')。
                    grid.ajaxRequest();
                    返回false;
                });                $('#grdCustomerEventRoleData#productvariants网表THEAD #checkAllRecords')。点击(函数(){
                    $(#grdCustomerEventRoleData#productvariants网表TBODY输入:勾选)ATTR(选中,this.checked);
                });
            });            功能Grid_onError(参数){
                如果(args.textStatus ==modelstateerror&放大器;&安培; args.modelState){
                    VAR消息=错误:\\ n;
                    $。每个(args.modelState,功能(键,值){
                        如果(价值'错误'){
                            $。每个(value.errors,函数(){
                                消息+ =本+\\ n;
                            });
                        }
                    });
                    。ARGS preventDefault();
                    警报(消息);
                }
            }            功能Grid_onDataBinding(五){
                VAR loadData = TRUE;
                VAR电网= $(本)。数据(tGrid');                如果(loadData){
                    VAR searchModel = {
                        事件:$('#选择事件)VAL()
                    };
                    e.data = searchModel;
                }
            }            功能Grid_onSubmitChanges(五){
                // TODO传递当前的搜索参数                //我们不能传递提交更改搜索参数
                //这就是为什么我们只清除搜索PARAMS
                //$('#@Html.FieldIdFor(model = GT; model.Event)')VAL('');
                //$('#SearchCategoryId').val('​​0');
                //$('#SearchManufacturerId').val('​​0');
            }
        < / SCRIPT>
    < / TD>

我的控制器动作

 公众的ActionResult EmailReminder()
    {
        如果(!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers))
            返回AccessDeniedView();        VAR模型=新NotificationMailReminderModels();        model.Event = 0;        清单< Nop.Core.Domain.Catalog.Product>产品= _productRepository.Table.Where(P =>!p.EventDate = NULL&放大器;&安培; p.EventDate> = DateTime.MinValue).OrderBy(O = GT; o.Name).ToList();
        model.Events = products.Select(P =>新建System.Web.Mvc.SelectListItem
        {
            文本= p.Name.Trim(),
            值= p.Id.ToString()
        })了ToList()。        返回查看(模型);
    }

[HttpPost,GridAction(EnableCustomBinding =真)]
        公众的ActionResult EmailReminderByEvent(INT []标识,GridCommand命令,NotificationMailReminderModels模型)
        {
            如果(!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers))
                返回AccessDeniedView();

  VAR gridModel =新GridModel();        字符串vwSlEv = ViewBag.SelectedEvent;
        INT selevent = 0;
        如果(!string.IsNullOrEmpty(vwSlEv))
        {
            Int32.TryParse(vwSlEv,出selevent);
        }
        其他
        {
            selevent = model.Event;
        }        VAR技术服务小组= _customerEventRoleRepository.Table.Where(E => e.EventId == selevent)。选择(CS => cs.CustomerId).Distinct()ToArray的()。        变种客户= _customerRepository.Table.Where(C =>!string.IsNullOrEmpty(c.Username)及&放大器;!string.IsNullOrEmpty(c.Email)及&放大器; csts.Contains(c.Id))了ToList。 ();        VAR gridmodel = customers.Select(X =>
        {
            NotificationMailReminderModel不等于新NotificationMailReminderModel();
            not.Id = x.Id;
            not.Username = x.Username;
            not.Firstname = x.CustomerAttributes.FirstName;
            not.Lastname = x.CustomerAttributes.LastName;            没有回报;
        });        VAR grddata =新PagedList< NotificationMailReminderModel>(gridmodel.ToList(),command.Page - 1,command.PageSize);        gridModel.Data = grddata;        gridModel.Total = grddata.TotalCount;        返回新JsonResult
        {
            数据= gridModel
        };
    }

数据网格,排序和筛选在我的网格工作正常。但我不能让文本菜单

在剃刀intellisence功能。

我要选择的行传递给控制器​​的POST功能。

不过,如何通过所选行中的控制器功能。

请帮忙。


解决方案

  

不过,如何通过所选行中的控制器功能。


JQuery的(样本code)

  VAR MyConnectionList = {
    ColorList:[]
};功能SendStream(){
    调试器;    MyConnectionList.ColorList.push({
        名称:测试1,
        颜色:红色
    });    MyConnectionList.ColorList.push({
        名称:Test2的,
        颜色:绿色
    });    $阿贾克斯({
        网址:乌尔URL,
        数据:JSON.stringify(MyConnectionList)
        输入:POST,
        的contentType:应用/ JSON,
        数据类型:JSON,
        成功:功能(数据){}
    });
}

动作方法

 公众的ActionResult SendStream(列表<样品> ColorList)
{
}

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.

解决方案

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)
{
}

这篇关于在NOP商务部Terilik网格控制器传递所选行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆