c# - 在获取请求.NET MVC Core 中使用多个条件进行分页问题
问题描述
我正在使用 Net Core MVC 结构开发一个 Web 应用程序。我有一个包含许多搜索条件的页面,我想通过 URL 发送参数并获取请求。我在视图中使用了许多选择组件,并且可以选择多个值。我在请求中通过 URL 发送一个或多个值。在我看来,有一个分页系统,在使用过滤器值发出获取请求后,没有检索或设置值来选择组件。我也在使用 Select2 组件。简而言之,分页会在视图控制器之间产生检索或发送值的问题。
[HttpGet]
public async Task<IActionResult> TumApartmanlar(long il,long[] ilceler, int? pageNumber)
{
ViewData["ilceler"] = ilceler;
ViewData["il"] = il;
//Then set to filters
var sonuc = _apartmanService.ListByFilters(filters, loadImages: true);
int pageSize = 10;
TumApartmanlarViewModel tumApartmanlar = new TumApartmanlarViewModel();
tumApartmanlar.ApartmanListe = PaginatedList<ApartmanListDto>.Create(sonuc, pageNumber ?? 1, pageSize),
..... another code part and paging
return View(tumApartmanlar);
}
查看部分:
<form asp-controller="EndUser" asp-action="TumApartmanlar" method="get">
<div class="row mt-2">
<div class="col-12">
<label>İl</label>
<select class="form-control" id="selectIlSec" asp-for="@ViewData["il"]" name="il"
asp-items="@(new SelectList(Model.Iller,"Id","Ad"))">
<option></option>
</select>
</div>
</div>
<div class="row mt-2">
<div class="col-12">
<label>İlçe</label>
<select multiple="multiple" class="form-control" disabled="@(Model.ApartmanFilters.IlId>0?false:"disabled")" id="selectIlceSec"
name="ilceler" asp-for="@ViewData["ilceler"]" asp-items="@(new MultiSelectList(Model.Ilceler,"Id","Ad"))">
<option></option>
</select>
</div>
/*Another components*/
</div>
<button type="submit" style="width:100%;" class="btnAra btn btn-md p-2 mt-3 mb-3 btn-danger"> Ara </button>
</form>
@{
var prevDisabled = !Model.ApartmanListe.HasPreviousPage ? "disabled" : "";
var nextDisabled = !Model.ApartmanListe.HasNextPage ? "disabled" : "";
}
<a asp-action="TumApartmanlar"
asp-route-pageNumber="@(Model.ApartmanListe.PageIndex - 1)"
asp-route-il="@Model.ApartmanFilters.IlId"
asp-route-ilceler="@(ViewData["ilceler"].ToString())"
class="btn btn-default @prevDisabled">
Previous
</a>
<a asp-action="TumApartmanlar"
asp-route-pageNumber="@(Model.ApartmanListe.PageIndex + 1)"
asp-route-il="@Model.ApartmanFilters.IlId"
asp-route-ilceler="@(ViewData["ilceler"].ToString())"
class="btn btn-default @nextDisabled">
Next
</a>
脚本部分
$("#selectIlSec").select2({
width: 'resolve',
placeholder: "İl Seçiniz",
allowClear: true
});
$("#selectIlceSec").select2({
width: 'resolve',
placeholder: "İlçe Seçiniz",
allowClear: true
});
单击分页按钮时如何实现发送多个选定值?我尝试asp-for-ilceler
但不发送值。此外,当单击按钮获取请求时,URL 看起来像..../EndUser/TumApartmanlar?il=1&ilceler=1&ilceler=2...
Paging can not bind like seperate ilceler
。我在等你的帮助,谢谢。
更新
我的过滤器类
public class ApartmanListFilter
{
[FromQuery(Name = "il")]
public long IlId { get; set; }
[FromQuery(Name = "ilceler")]
public List<long> IlceIds { get; set; }
}
如果我像上面那样使用,我的控制器和视图会像下面一样改变,但我仍然有问题。
[HttpGet]
public IActionResult Evler([FromQuery]ApartmanListFilter filters)
{
var sonuc = _apartmanService.ListByFilters(filters, loadImages: true);
//Another codes
return View(sonuc);
}
<div class="col-12">
<label>İl</label>
<select class="form-control" id="selectIlSec" asp-for="@Model.ApartmanFilters.IlId" name="il"
asp-items="@(new SelectList(Model.Iller,"Id","Ad"))">
<option></option>
</select>
</div>
解决方案
解决方案 1
可以使用javasript
跳转,下面是一个例子。
举Previous
个例子:
<a class="sort" href="javascript:void(0)">
Previous
</a>
@section scripts{
<script>
var c=@Html.Raw(Json.Serialize((long[])ViewData["ilceler"]));
$(".sort").click(function () {
var link = "/EndUser/TumApartmanlar?";
link += "il=" + 1 +"&";
c.forEach(function (value) {
link += "ilceler=" + value + "&";
});
link += "pageNumber=" + 1;
window.location.href = link;
})
</script>
}
请注意,il
和pageNumber
是我的模拟数据,您需要自己在javascript中获取它。
测试结果:
解决方案 2
您可以将类型更改long[]
为string[]
, 然后在您的TumApartmanlar
:
[HttpGet]
public async Task<IActionResult> TumApartmanlar(long il, string[] ilceler, int? pageNumber)
{
string ids = String.Join(",", ilceler.Select(p => p.ToString()).ToArray());
ViewData["ilceler"] = ids;
ViewData["il"] = il;
然后当你点击a标签时,你ilceler
会变成像string[0]="1,3"
,然后你可以将数据处理成你想要的格式。
测试结果:
推荐阅读
- module - 如何安装 Ejabberd 自定义模块
- pandas - Pandas:从三列中选择一个值,并在不同的列中分配一个值 - 使用 pandas
- numpy - 重塑 numpy 数组,进行转换并进行反向重塑
- javascript - POST http://localhost:3000/addProjectTask/api/backlog/id09 404(未找到)
- linux - 我的 mongodb 怎么样了。mongod 终端命令未运行它显示了这一点
- python - "Â" 无法从 html 文件中读取
- python - 使用 Doc2Vec 训练文档时句子中句号的意义
- python - 如何在 Mako 的一行中重复表达式指定次数
- c# - 将两个单独的数据字段存储到一个数组中 c# Array Json from Class
- android - 如何使用 PEM 证书更新我的反应原生应用程序