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();
}