首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >剃须刀页排序中的问题

剃须刀页排序中的问题
EN

Stack Overflow用户
提问于 2022-02-22 16:04:40
回答 1查看 325关注 0票数 0

我试图在我的一个表中实现排序功能。我使用这些文档作为参考--> https://learn.microsoft.com/en-us/aspnet/core/data/ef-rp/sort-filter-page?view=aspnetcore-3.1#add-sorting

我已经成功地用行加载了表,并且可以通过在变量sortOrder中应用不同的值(我指硬编码)来更改顺序。

当我试图单击列标题(使用锚标记)时,我遇到了一个问题。例如,当我在列标题Nombre中单击时,sortOrder变量应该会更改。

代码语言:javascript
运行
复制
<a asp-page="/Administracion/Capacitaciones/InscriptosPartialModel?Id=@Model.CursoId" asp-route-sortOrder="@Model.NameSort">
 @Html.DisplayNameFor(model => model.Alumnos[0].Nombre)</a>

但是,我不会只接收get参数nameSort,只接收Id。根据文档,它也应该附加asp-route-sortOrder属性的sortOrder。

我尝试删除属性asp-route-sortOrder并使用url ->中的get参数生成URL。

代码语言:javascript
运行
复制
 asp-page="/Administracion/Capacitaciones/InscriptosPartialModel?Id=@Model.CursoId&sortOrder=@Model.NameSort"

但我在那里还是会空的。也许这和局部有关。它将表作为一个部分返回,也许我失去了变量的引用。

RegisteredUsers.cshtml

代码语言:javascript
运行
复制
@page
@model Administracion.Capacitaciones.InscriptosPartialModel
@{
}
<div id="inscriptos"></div>

@section scripts {
    <script>
    $('#inscriptos')
    .load('/Administracion/Capacitaciones/InscriptosPartialModel/InscriptosPartial?Id=' + cursoId, function () {
   // I have some UI events here, ommiting them for simplicity
}
</script>

InscriptosPartialModel.cshtml.cs (路径-> Administracion\Capacitaciones\InscriptosPartialModel.cshtml.cs) )

代码语言:javascript
运行
复制
public class InscriptosPartialModel : PageModel
{
    public List<UsuarioInscriptoCursoModel> Alumnos { get; set; }
    public string NameSort { get; set; }
    public string DniSort { get; set; }

    public string _sortOrder { get; set; }

    public IQueryable<UsuarioInscriptoCursoModel> AlumnosIQ { get; set; }

    private IInscripcionRegistroCursoRepository ircRepo;

    private ICursoRepository _cursoRepo;


    public int CursoId { get; set; }
    public string NombreCurso { get; set; }

    public InscriptosPartialModel(
        IInscripcionRegistroCursoRepository inscripcionRegistroCursoRepository,
         ICursoRepository cursoRepository)
    {
        ircRepo = inscripcionRegistroCursoRepository;
        _cursoRepo = cursoRepository;
    }

    public void OnGet(int Id, string sortOrder)
    {
        CursoId = Id;
        NombreCurso = _cursoRepo.GetById(Id).Nombre;

        NameSort = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
        DniSort = sortOrder == "dni" ? "dni_desc" : "dni";

        _sortOrder = sortOrder;

    }
    public async Task<PartialViewResult> OnGetInscriptosPartialAsync(int Id)
    {
        AlumnosIQ = ircRepo.GetAlumnosByCursoId(Id, _sortOrder);
        if (AlumnosIQ.Count() > 0)
        {
            Alumnos = await AlumnosIQ.AsNoTracking().ToListAsync();

            return Partial("_InscriptosTable", this);
        }
        else
        {
            return Partial("_EmptyData");
        }

    }
}

_InscriptosTable.cshtml

代码语言:javascript
运行
复制
@using Models
@model InscriptosPartialModel

<table class="table table-striped">
    <thead class="table_header">
        <tr>
            <th class="text-center"><input id="selectAll" type="checkbox" /></th>
            <th>
                <a asp-page="/Administracion/Capacitaciones/InscriptosPartialModel?Id=@Model.CursoId" asp-route-sortOrder="@Model.NameSort">
                    @Html.DisplayNameFor(model => model.Alumnos[0].Nombre)
                </a>
            </th>
            <th>@Html.DisplayNameFor(model => model.Alumnos[0].Apellido)</th>
            <th>
                <a asp-page="/Administracion/Capacitaciones/InscriptosPartialModel?Id=@Model.CursoId" asp-route-sortOrder="@Model.DniSort">
                    @Html.DisplayNameFor(model => model.Alumnos[0].Dni)
                </a>
            </th>
            <th>@Html.DisplayNameFor(model => model.Alumnos[0].ModulosInscripto.NombreModulo)</th>
            <th>@Html.DisplayNameFor(model => model.Alumnos[0].Asistencia)</th>
            <th>@Html.DisplayNameFor(model => model.Alumnos[0].Calificacion)</th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var alumno in Model.Alumnos)
        {
            <tr>
                <td class="text-center">
                    <input type="checkbox"
                           data-alumno="@alumno.Id"
                           data-modulo="@alumno.ModulosInscripto.ModuloId"
                           name="select-@alumno.Dni"
                           @(alumno.CumpleAsistencia() ? "disabled" : "") />
                </td>
                <td>@Html.DisplayFor(modelItem => alumno.Nombre)</td>
                <td>@Html.DisplayFor(modelItem => alumno.Apellido)</td>
                <td>@Html.DisplayFor(modelItem => alumno.Dni)</td>
                <td>@Html.DisplayFor(modelItem => alumno.ModulosInscripto.NombreModulo)</td>
                <td>
                    @{
                        var encuentros = alumno.Asistencia + " / " + alumno.CantidadEncuentros;
                        @Html.DisplayFor(m => encuentros)
                    }
                </td>
                <td>@Html.DisplayFor(modelItem => alumno.Calificacion)</td>

                <td>
                    <button type="button"
                            class="btn btn-primary button_lenga_primary"
                            id="desuscribirBtn"
                            data-mod="@alumno.ModulosInscripto.ModuloId"
                            data-alu="@alumno.Id"
                            data-dni="@alumno.Dni"
                            data-namemod="@alumno.ModulosInscripto.NombreModulo"
                            data-toggle="modal"
                            data-target="#desuscribir-modal">
                        Quitar
                    </button>
                </td>
            </tr>
        }
    </tbody>
</table>

InscripcionRegistroCursoRepository.cs

代码语言:javascript
运行
复制
public class InscripcionRegistroCursoRepository : GenericRepository<InscripcionRegistroCurso>, IInscripcionRegistroCursoRepository
    {
        public InscripcionRegistroCursoRepository(LengaContext context) : base(context)
        {
        }

        public IQueryable<UsuarioInscriptoCursoModel> GetAlumnosByCursoId(int CursoId, string sortOrder)
        {
            var inscripciones = context.Inscripciones
                .Where(row => row.InscripcionRegistroCursoId == CursoId);

            var query = (from inscripcion in inscripciones
                         join alumno in context.Alumnos on inscripcion.AlumnoId equals alumno.AlumnoId
                         join usuario in context.UsuariosExternos on alumno.AlumnoId equals usuario.AlumnoId
                         select new UsuarioInscriptoCursoModel
                         {
                             Nombre = usuario.Nombre,
                             Apellido = usuario.Apellido,
                             Dni = usuario.Dni,
                             Id = usuario.AlumnoId,
                             ModulosInscripto = inscripcion.Modulo,
                             Asistencia = inscripcion.Asistencia,
                             Calificacion = inscripcion.Calificacion,
                             CantidadEncuentros = inscripcion.Modulo.Encuentros
                         })
                             .Distinct();

            switch (sortOrder) {
                case "name_desc":
                    query = query.OrderByDescending(a => a.Nombre);
                    break;
                case "dni":
                    query = query.OrderBy(a => a.Dni);
                    break;
                case "dni_desc":
                    query = query.OrderByDescending(a => a.Dni);
                    break;
                default:
                    query = query.OrderBy(a => a.Nombre);
                    break;
            }
            return query;
        }
}

有什么想法吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 03:11:01

首先,当你使用

代码语言:javascript
运行
复制
$('#inscriptos')
    .load('/Administracion/Capacitaciones/InscriptosPartialModel/InscriptosPartial?Id=' + cursoId, function () {
   // I have some UI events here, ommiting them for simplicity
}

在您的RegisteredUsers.cshtml中,它将转到OnGet(int Id, string sortOrder),并且由于NameSort"",所以NameSort将被设置为name_desc

然后我试着用

代码语言:javascript
运行
复制
<a asp-route-Id="@Model.CursoId" asp-route-sortOrder="@Model.NameSort">

要将Id和sortOrder传递给OnGet(int Id, string sortOrder),我可以在OnGet(int Id, string sortOrder).Since sortOrder中获得Id和sortOrder的值,而不是"",因此这次"NameSort“将被设置为""NameSort = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";

所以您的sortOrder是空的,因为它是在您将sortOrder(非null)传递给OnGet,然后OnGetsortOrder设置为""之后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71224484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档