【发布时间】:2021-06-06 06:38:42
【问题描述】:
我正在使用 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... 分页不能像单独的 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>
【问题讨论】:
-
对我来说,
?il=1&ilceler=1&ilceler=2可以成功绑定到动作public void test(long il,long[] ilceler),能详细描述一下你的问题吗? -
当我点击请求按钮时,不是绑定问题。但是单击分页链接会产生有关搜索条件的问题。单击可选择多个 select2 值的分页后,我丢失了搜索条件值。获取设置输入或 öne 值没有问题。唯一的问题是获取请求链接中的多选值。
-
你能分享你的模型吗?
-
我尝试了两种搜索条件。一种方法就像上面那样是单独的参数。第二种方法是创建用于获取过滤器值的模型。我正在与编辑帖子共享我的过滤器类和视图模型。实际上,正如我之前所说,问题在于单击分页链接,它会丢失搜索条件。
标签: c# asp.net-core model-view-controller asp.net-core-mvc model-binding