DotVVM DataPager 不工作
DotVVM DataPager not working
dothtml table 与 DataPager:
<bp:GridView DataSource="{value: UserRoleGroupListDTOs}" class="table table-bordered table-hover dataTable">
<Columns>
<%--<dot:GridViewTextColumn ValueBinding="{value: Name}" HeaderText="Název" Events.Click="{command: GoToDetail() }"/>--%>
<bp:GridViewTemplateColumn HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Name}">
<dot:RouteLink Text="{value: Name}" RouteName="UserRoleGroupDetail" Param-Id="{value: Id}" />
</bp:GridViewTemplateColumn>
<bp:GridViewCheckBoxColumn ValueBinding="{value: IsBlocked}" HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Forbidden}" IsEditable="true"/>
<bp:GridViewTemplateColumn HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Delete}" CssClass="align center">
<%--<i class="glyphicon glyphicon-remove remove-from-list" style="color:red;">
</i>--%>
<dot:Button class="btn btn-default" Click="{command: _parent.DeleteUserRoleGroup(Id)}" Text="{resource: eCENTRE.Common.Resources.Admin.Common.Delete}"/>
</bp:GridViewTemplateColumn>
</Columns>
</bp:GridView>
<bp:DataPager DataSet="{value: UserRoleGroupListDTOs}"/>
ViewModel 和函数 Prerender 中的初始化:
public GridViewDataSet<UserRoleGroupListDTO> UserRoleGroupListDTOs { get; set; }
private readonly IUserRoleGroupFacade userRoleGroupDetailFacade;
private readonly UserRoleGroupCrudFacade crudFacade;
public UserRoleGroupListViewModel(IUserRoleGroupFacade userRoleGroupDetailFacade, UserRoleGroupCrudFacade crudFacade)
{
this.userRoleGroupDetailFacade = userRoleGroupDetailFacade;
this.crudFacade = crudFacade;
}
public override Task Init()
{
return base.Init();
}
public override Task PreRender()
{
UserRoleGroupListDTOs = new GridViewDataSet<UserRoleGroupListDTO>();
UserRoleGroupListDTOs.PagingOptions.PageSize = 10;
UserRoleGroupListDTOs.SortingOptions.SortDescending = true;
UserRoleGroupListDTOs.SortingOptions.SortExpression = nameof(UserRoleGroupListDTO.Name);
UserRoleGroupListDTOs.OnLoadingData = options => Task.Run(() => userRoleGroupDetailFacade.GetUserRoleGroupGridViewDataSetLoadedData(options)).Result;
return base.PreRender();
}
寻呼机确实显示,但点击任何按钮后,没有任何反应。
如果我在 Init 方法中添加初始化,pager 可以工作,但 viewModel 有另一个错误。
您需要在 Init
阶段初始化寻呼机。
PreRender
事件发生在来自页面的命令被处理之后。您基本上是用初始数据集覆盖数据集。
参见 ViewModels Documentation 中的图表。
正如 Tomas 所写,您创建了数据集的新实例,因此您失去了 PagingOptions。
您只能在新请求中初始化数据集,而不是在回发中。
public override Task Init()
{
if (!Context.IsPostBack)
{
UserRoleGroupListDTOs = new GridViewDataSet<UserRoleGroupListDTO>
{
PagingOptions = { PageSize = 10 },
SortingOptions =
{
SortDescending = true,
SortExpression = nameof(UserRoleGroupListDTO.Name)
},
};
}
return base.Init();
}
然后你必须在加载或 PreRender 中设置 delagate OnLoadingData
public override Task PreRender()
{
UserRoleGroupListDTOs.OnLoadingData =
options => Task.Run(() => userRoleGroupDetailFacade.GetUserRoleGroupGridViewDataSetLoadedData(options)).Result;
return base.PreRender();
}
dothtml table 与 DataPager:
<bp:GridView DataSource="{value: UserRoleGroupListDTOs}" class="table table-bordered table-hover dataTable">
<Columns>
<%--<dot:GridViewTextColumn ValueBinding="{value: Name}" HeaderText="Název" Events.Click="{command: GoToDetail() }"/>--%>
<bp:GridViewTemplateColumn HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Name}">
<dot:RouteLink Text="{value: Name}" RouteName="UserRoleGroupDetail" Param-Id="{value: Id}" />
</bp:GridViewTemplateColumn>
<bp:GridViewCheckBoxColumn ValueBinding="{value: IsBlocked}" HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Forbidden}" IsEditable="true"/>
<bp:GridViewTemplateColumn HeaderText="{resource: eCENTRE.Common.Resources.Admin.Common.Delete}" CssClass="align center">
<%--<i class="glyphicon glyphicon-remove remove-from-list" style="color:red;">
</i>--%>
<dot:Button class="btn btn-default" Click="{command: _parent.DeleteUserRoleGroup(Id)}" Text="{resource: eCENTRE.Common.Resources.Admin.Common.Delete}"/>
</bp:GridViewTemplateColumn>
</Columns>
</bp:GridView>
<bp:DataPager DataSet="{value: UserRoleGroupListDTOs}"/>
ViewModel 和函数 Prerender 中的初始化:
public GridViewDataSet<UserRoleGroupListDTO> UserRoleGroupListDTOs { get; set; }
private readonly IUserRoleGroupFacade userRoleGroupDetailFacade;
private readonly UserRoleGroupCrudFacade crudFacade;
public UserRoleGroupListViewModel(IUserRoleGroupFacade userRoleGroupDetailFacade, UserRoleGroupCrudFacade crudFacade)
{
this.userRoleGroupDetailFacade = userRoleGroupDetailFacade;
this.crudFacade = crudFacade;
}
public override Task Init()
{
return base.Init();
}
public override Task PreRender()
{
UserRoleGroupListDTOs = new GridViewDataSet<UserRoleGroupListDTO>();
UserRoleGroupListDTOs.PagingOptions.PageSize = 10;
UserRoleGroupListDTOs.SortingOptions.SortDescending = true;
UserRoleGroupListDTOs.SortingOptions.SortExpression = nameof(UserRoleGroupListDTO.Name);
UserRoleGroupListDTOs.OnLoadingData = options => Task.Run(() => userRoleGroupDetailFacade.GetUserRoleGroupGridViewDataSetLoadedData(options)).Result;
return base.PreRender();
}
寻呼机确实显示,但点击任何按钮后,没有任何反应。
如果我在 Init 方法中添加初始化,pager 可以工作,但 viewModel 有另一个错误。
您需要在 Init
阶段初始化寻呼机。
PreRender
事件发生在来自页面的命令被处理之后。您基本上是用初始数据集覆盖数据集。
参见 ViewModels Documentation 中的图表。
正如 Tomas 所写,您创建了数据集的新实例,因此您失去了 PagingOptions。
您只能在新请求中初始化数据集,而不是在回发中。
public override Task Init()
{
if (!Context.IsPostBack)
{
UserRoleGroupListDTOs = new GridViewDataSet<UserRoleGroupListDTO>
{
PagingOptions = { PageSize = 10 },
SortingOptions =
{
SortDescending = true,
SortExpression = nameof(UserRoleGroupListDTO.Name)
},
};
}
return base.Init();
}
然后你必须在加载或 PreRender 中设置 delagate OnLoadingData
public override Task PreRender()
{
UserRoleGroupListDTOs.OnLoadingData =
options => Task.Run(() => userRoleGroupDetailFacade.GetUserRoleGroupGridViewDataSetLoadedData(options)).Result;
return base.PreRender();
}