Asp.net mvc 4 带viewmodel的剑道网格mvc
我已经为此挣扎了一段时间,我不确定这是否正确。但是我有一个带有三个表的视图模型,在我的视图中,我使用的是视图模型。视图有一个剑道网格,它需要来自视图模型中一个表的数据,我无法将模型绑定到网格。任何线索都很感激 ViewModel.cs:Asp.net mvc 4 带viewmodel的剑道网格mvc,asp.net-mvc-4,kendo-grid,kendo-asp.net-mvc,asp.net-mvc-viewmodel,Asp.net Mvc 4,Kendo Grid,Kendo Asp.net Mvc,Asp.net Mvc Viewmodel,我已经为此挣扎了一段时间,我不确定这是否正确。但是我有一个带有三个表的视图模型,在我的视图中,我使用的是视图模型。视图有一个剑道网格,它需要来自视图模型中一个表的数据,我无法将模型绑定到网格。任何线索都很感激 ViewModel.cs: public class AppAccountMappingViewModel { public virtual List<AppAccountsExternal> AppAccountsExternal { get; se
public class AppAccountMappingViewModel
{
public virtual List<AppAccountsExternal> AppAccountsExternal { get; set; }
public virtual List<AppAccountsInternal> AppAccountsInternal { get; set; }
public virtual AppAccountMapping AppAccountMapping { get; set; }
}
视图:
@model EntityFrameworkClasses.ViewModel.AppAccountMappingViewModel
@(Html.Kendo().Grid(Model)
.Name("AppAccountInternalGrid")
.Columns(columns =>
{
//columns.Bound(p => p.View).Title("View").ClientTemplate("<a href='" + Url.Action("Index","SaveRec") + "' target='_blank'>View</a>").Width(150);
columns.Bound(p => p.AppAccountsInternal).Title("Account Internal Name Label1").Width(100);
columns.Bound(p => p.Select(x=>x.AccountInternalNameLabel2)).Title("Account Internal Name Label2").Width(130);
columns.Bound(p => p.Select(x=>x.AccountInternalNameLabel3)).Title("Account Internal Name Label3").Width(130);
columns.Bound(p => p.Select(x=>x.AccountInternalNameLabel4)).Title("Account Internal Name Label4").Width(150);
columns.Bound(p => p.Select(x=>x.AccountsInternalID)).Title("Accounts Internal ID").Width(150);
columns.Bound(p => p.Select(x=>x.ClientID)).Title("ClientID").Width(150);
})
.HtmlAttributes(new { style = "height: 550px;" })
.Groupable()
.Reorderable(r => r.Columns(true))
.Sortable()
.ColumnMenu()
.Scrollable(scr => scr.Height(430))
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(50)
.ServerOperation(false)
.PageSize(20)
)
.Pageable(pageable => pageable
.Refresh(true)
.Input(true)
.Numeric(false)
)
.Selectable()
)
@model EntityFrameworkClasses.ViewModel.AppAccountMappingViewModel
@(Html.Kendo().Grid(模型)
.Name(“AppAccountInternalGrid”)
.列(列=>
{
//columns.Bound(p=>p.View).Title(“View”).ClientTemplate(“”)。宽度(150);
columns.Bound(p=>p.AppAccountsInternal).Title(“账户内部名称标签1”).Width(100);
columns.Bound(p=>p.Select(x=>x.accountinternalnamel2)).Title(“accountinternalnamel2”).Width(130);
columns.Bound(p=>p.Select(x=>x.AccountInternalNameLabel3)).Title(“AccountInternalNameLabel3”).Width(130);
columns.Bound(p=>p.Select(x=>x.AccountInternalNameLabel4)).Title(“AccountInternalNameLabel4”).Width(150);
columns.Bound(p=>p.Select(x=>x.AccountsInternalID)).Title(“账户内部ID”).Width(150);
columns.Bound(p=>p.Select(x=>x.ClientID)).Title(“ClientID”).Width(150);
})
.HtmlAttributes(新的{style=“height:550px;”})
.Groupable()
.Reorderable(r=>r.Columns(true))
.Sortable()
.column菜单()
.可滚动(scr=>scr.高度(430))
.可过滤()
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(50)
.ServerOperation(错误)
.页面大小(20)
)
.Pageable(Pageable=>Pageable
.刷新(真)
.输入(真)
.数字(假)
)
.可选()
)
我把模型装订起来弄错了。正确的做法是什么?非常感谢您的帮助。谢谢 即使您通过模型将初始负载带到网格中,您也需要记住,网格从一个称为端点的ajax读取(它自己进行调用)。在设计时将模型指定给网格有助于列验证和其他工作 您应该在网格数据源上实现read方法,然后使用单独的控制器方法将集合返回到网格
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(200)
.Read(read => read.Action("GetAppAccountsInternaGridData", "MyController", @Model.clientID))
.ServerOperation(false)
控制器需要一种方法来获取网格数据
using Kendo.Mvc
...
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult GetAppAccountsInternaGridData(int clientID, [DataSourceRequest] DataSourceRequest request)
{
var result = new AppAccountMappingViewModel();
result.AppAccountsInternal= _unitofwork.AppAccountsInternal.GetInternalClients(clientid);
return View(result);
return Json(result.AppAccountsInternal.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
即使您通过模型将初始负载引入网格,您也需要记住,网格从一个称为端点的ajax读取(它自己进行调用)。在设计时将模型指定给网格有助于列验证和其他工作 您应该在网格数据源上实现read方法,然后使用单独的控制器方法将集合返回到网格
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(200)
.Read(read => read.Action("GetAppAccountsInternaGridData", "MyController", @Model.clientID))
.ServerOperation(false)
控制器需要一种方法来获取网格数据
using Kendo.Mvc
...
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult GetAppAccountsInternaGridData(int clientID, [DataSourceRequest] DataSourceRequest request)
{
var result = new AppAccountMappingViewModel();
result.AppAccountsInternal= _unitofwork.AppAccountsInternal.GetInternalClients(clientid);
return View(result);
return Json(result.AppAccountsInternal.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
是否要将AppAccountsInternal字段中的数据绑定到网格?这可以很容易地完成,但我不明白您试图显示为列的值是什么?这似乎不正确。您的类AppAccountsInternal具有名为AccountInternalNameLabel2、AccountInternalNameLabel3和AccountInternalNameLabel4的字段? 如果这只是您的问题的一些示例代码,并且我已经正确理解了,那么您所要做的就是将正确的模型绑定到网格并正确设置列 例如,如果AppAccountsInternal类属于此类型:
public class AppAccountsInternal
{
public string AppAccountsInternal1 { get; set; }
public virtual string AppAccountsInternal2 { get; set; }
public virtual string AppAccountsInternal3 { get; set; }
}
你的网格应该有这样的列。绑定到model.appaccounts内部列表,并将字段名称作为名称
@(Html.Kendo().Grid(Model.AppAccountsInternal )
.Name("AppAccountsInternal ")
.Columns(columns =>
{
columns.Bound(p => p.AppAccountsInternal1).Title("Account Internal Name Label1").Width(100);
columns.Bound(p => p.AppAccountsInternal2).Title("Account Internal Name Label2").Width(130);
columns.Bound(p => p.AppAccountsInternal3).Title("Account Internal Name Label3").Width(130);
// more columns
})
如果您只想显示数据,这是一种方法。如果希望在网格行中进行操作,则情况会发生很大变化。您可以使用客户端输入模板提交表单,也可以使用Kendo CRUD操作,但这是另一个问题。是否要将AppAccountsInternal字段中的数据绑定到网格?这可以很容易地完成,但我不明白您试图显示为列的值是什么?这似乎不正确。您的类AppAccountsInternal具有名为AccountInternalNameLabel2、AccountInternalNameLabel3和AccountInternalNameLabel4的字段? 如果这只是您的问题的一些示例代码,并且我已经正确理解了,那么您所要做的就是将正确的模型绑定到网格并正确设置列 例如,如果AppAccountsInternal类属于此类型:
public class AppAccountsInternal
{
public string AppAccountsInternal1 { get; set; }
public virtual string AppAccountsInternal2 { get; set; }
public virtual string AppAccountsInternal3 { get; set; }
}
你的网格应该有这样的列。绑定到model.appaccounts内部列表,并将字段名称作为名称
@(Html.Kendo().Grid(Model.AppAccountsInternal )
.Name("AppAccountsInternal ")
.Columns(columns =>
{
columns.Bound(p => p.AppAccountsInternal1).Title("Account Internal Name Label1").Width(100);
columns.Bound(p => p.AppAccountsInternal2).Title("Account Internal Name Label2").Width(130);
columns.Bound(p => p.AppAccountsInternal3).Title("Account Internal Name Label3").Width(130);
// more columns
})
如果您只想显示数据,这是一种方法。如果希望在网格行中进行操作,则情况会发生很大变化。您可以使用客户端输入模板提交表单,也可以使用Kendo CRUD操作,但这是另一个问题