Asp.net mvc 3 通过dropdownlist选择值在Telerik网格中加载数据
我是ASP.NETMVC3中Telerik网格的初学者。我尝试用dropdownlist选择值绑定网格。请看下面我的代码 我的网络模型课Asp.net mvc 3 通过dropdownlist选择值在Telerik网格中加载数据,asp.net-mvc-3,jquery,gridview,telerik-grid,nopcommerce,Asp.net Mvc 3,Jquery,Gridview,Telerik Grid,Nopcommerce,我是ASP.NETMVC3中Telerik网格的初学者。我尝试用dropdownlist选择值绑定网格。请看下面我的代码 我的网络模型课 public class CustomerEventRolesModels { public int Event { get; set; } public IEnumerable<System.Web.Mvc.SelectListItem> Events { get; set; } public Telerik.Web.Mv
public class CustomerEventRolesModels
{
public int Event { get; set; }
public IEnumerable<System.Web.Mvc.SelectListItem> Events { get; set; }
public Telerik.Web.Mvc.GridModel<CustomerEventRolesModel> GridData { get; set; }
}
public class CustomerEventRolesModel : BaseNopEntityModel
{
public string Customer { get; set; }
public bool Sponsor { get; set; }
public bool Speaker { get; set; }
}
公共类CustomerVentroleSModels
{
公共int事件{get;set;}
公共IEnumerable事件{get;set;}
public Telerik.Web.Mvc.GridModel GridData{get;set;}
}
公共类CustomerVentroleSModel:BaseNopEntityModel
{
公共字符串Customer{get;set;}
公共bool赞助商{get;set;}
公共广播扬声器{get;set;}
}
My.cshtml
<table id="grdCustomerEventRoleData" class="adminContent" style="display: none">
<tr>
<td>
<p>
</p>
</td>
</tr>
<tr>
<td>
@(Html.Telerik().Grid<CustomerEventRolesModel>(Model.GridData.Data)
.Name("grdCustomerEventRoles")
.Columns(columns =>
{
columns.Bound(x => x.Customer);
columns.Bound(x => x.Speaker).Template(x => Html.CheckBox("spk", x.Speaker));
columns.Bound(x => x.Sponsor).Template(x => Html.CheckBox("spn", x.Sponsor));
}
) .Pageable(settings => settings.Total(Model.GridData.Total)
.PageSize(gridPageSize)
.Position(GridPagerPosition.Both))
.ClientEvents(events => events.OnDataBinding("onDataBinding"))
.DataBinding(dataBinding => dataBinding.Ajax().Select("FilterByDropdown", "Customer"))
.EnableCustomBinding(true))
) )
</td>
</tr>
@(Html.Telerik().Grid(Model.GridData.Data)
.Name(“grdCustomerEventRoles”)
.列(列=>
{
columns.Bound(x=>x.Customer);
columns.Bound(x=>x.Speaker).Template(x=>Html.CheckBox(“spk”,x.Speaker));
columns.Bound(x=>x.shandor.Template(x=>Html.CheckBox(“spn”,x.shandor));
}
).Pageable(settings=>settings.Total(Model.GridData.Total)
.PageSize(gridPageSize)
.位置(GridPagerPosition.两者)
.ClientEvents(events=>events.OnDataBinding(“OnDataBinding”))
.DataBinding(DataBinding=>DataBinding.Ajax().Select(“FilterByDropdown”、“Customer”))
.EnableCustomBinding(true))
) )
var initialLoad=true;
$(“#选择事件”)。更改(函数(){
if($(“#选择事件选项:已选择”).val()>0){
$(“#grdCustomerEventRoleData”).show();
$(“#grdcustomeeventroles”).data(“tGrid”).rebind();
}
否则{
$(“#grdCustomerEventRoleData”).show();
}
});
函数onDataBinding(e){
if(initialLoad==true){
e、 预防默认值();
initialLoad=false;
}
否则{
var classificationId=$(“#选择事件选项:选中”).val();
如果(classificationId!=“”)
e、 数据=$.extend(如数据、{
selEvent:classificationId
});
否则{
e、 预防默认值();
$(“#grdCustomerEventRoleData”).hide();
}
}
}
控制器中的操作
public ActionResult FirstBind()
{
if (!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers))
return AccessDeniedView();
var model = new CustomerEventRolesModels();
model.Event = 0;
List<Nop.Core.Domain.Catalog.Product> products = _productRepository.Table.Where(p => p.EventDate != null && p.EventDate >= DateTime.Now).ToList();
model.Events = products.Select(p => new System.Web.Mvc.SelectListItem
{
Text = p.Name,
Value = p.Id.ToString()
});
var grdmodel = new GridModel<CustomerEventRolesModel>
{
Data = null,
Total = 0
};
model.GridData = grdmodel;
return View(model);
}
[HttpPost, GridAction(EnableCustomBinding = true)]
public ActionResult FilterByDropdown(GridCommand command, int selEvent)
{
if (!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers))
return AccessDeniedView();
if (selEvent == 0)
return View();
var model = new CustomerEventRolesModels();
model.Event = selEvent;
var roles = (from lst in _customerEventRoleRepository.Table
join cust in _customerRepository.Table on lst.CustomerId equals cust.Id
join product in _productRepository.Table on lst.EventId equals product.Id
join role in _customerRoleRepository.Table on lst.RoleId equals role.Id
orderby lst.Id descending
select new CustomerEventRolesModel
{
Id = lst.Id,
Customer = cust.Email,
Sponsor = (role.Name == "Sponsor") ? true : false,
Speaker = (role.Name == "Speaker") ? true : false
}).ToList();
var grdmodel = new GridModel<CustomerEventRolesModel>
{
Data = roles,
Total = roles.Count
};
model.GridData = grdmodel;
return new JsonResult
{
Data = model
};
}
public ActionResult FirstBind()
{
if(!\u permissionService.Authorize(StandardPermissionProvider.ManageCustomers))
返回AccessDeniedView();
var模型=新的CustomerVentroleSModels();
model.Event=0;
List products=\u productRepository.Table.Where(p=>p.EventDate!=null&&p.EventDate>=DateTime.Now).ToList();
model.Events=products.Select(p=>newsystem.Web.Mvc.SelectListItem
{
Text=p.名称,
值=p.Id.ToString()
});
var grdmodel=新网格模型
{
数据=空,
总数=0
};
model.GridData=grdmodel;
返回视图(模型);
}
[HttpPost,GridAction(EnableCustomBinding=true)]
public ActionResult FilterByDropdown(GridCommand命令,int-selfevent)
{
if(!\u permissionService.Authorize(StandardPermissionProvider.ManageCustomers))
返回AccessDeniedView();
如果(selEvent==0)
返回视图();
var模型=新的CustomerVentroleSModels();
model.Event=selEvent;
var roles=(来自_customerEventRoleRepository.Table中的lst
在lst.CustomerId等于cust.Id的_customerRepository.Table中加入cust
在lst.EventId等于product.Id的_productRepository.Table中加入产品
lst.RoleId等于role.Id上的_customerRoleRepository.Table中的联接角色
orderby lst.Id降序
选择新的CustomerVentroleSModel
{
Id=lst.Id,
客户=客户电子邮件,
赞助商=(role.Name==“赞助商”)?true:false,
Speaker=(role.Name=“Speaker”)?true:false
}).ToList();
var grdmodel=新网格模型
{
数据=角色,
总计=角色数
};
model.GridData=grdmodel;
返回新的JsonResult
{
数据=模型
};
}
FilterByDropdown操作正常,但网格未绑定
我不懂
请帮助。您退回的型号不对 在FilterByDropdown中尝试以下操作:
var grdmodel = new GridModel<CustomerEventRolesModel>
{
Data = roles,
Total = roles.Count
};
return new JsonResult
{
Data = grdmodel
};
var grdmodel=新网格模型
{
数据=角色,
总计=角色数
};
返回新的JsonResult
{
数据=GRD模型
};
如果您想在编辑行时向Telerik MVC网格添加下拉列表,则需要遵循以下几个步骤(除了使网格ajax绑定和行可编辑之外)
假设我们希望表示名称的列(“模型中的名称”)是一个下拉列表,从中可以选择名称,而不是键入名称。将名为“EditorTemplates”的文件夹添加到包含网格所在视图的文件夹中。对于我们要在正在编辑的行中显示的每个下拉列表,它将包含一个单独的局部视图。制作一个局部视图(如上所述),将其命名为“ClientName.cshtml”,其中包含一个名为“name”的Telerik下拉列表,并绑定到所需的名称列表
@(Html.Telerik().DropDownList())
.姓名(“姓名”)
.BindTo(新选择列表((IEnumerable)视图数据[“客户名称”]、“文本”、“值”))
)
向网格使用的数据类型的“名称”属性添加以下属性,例如网格使用“客户”类,包含“字符串名称”字段:
public类客户{[UIHint(“ClientName”),必需]公共字符串名{get;set;}}}
UIHint属性指定哪个字段
var grdmodel = new GridModel<CustomerEventRolesModel>
{
Data = roles,
Total = roles.Count
};
return new JsonResult
{
Data = grdmodel
};