Razor Pages - 如何将 select 下拉值插入 asp-route?
Razor Pages - How to insert a select dropdown value into an asp-route?
我有一个下拉列表 select,其中包含我在剃刀列表中使用的每页行的值。剃须刀列表已配置分页、排序和过滤。
这里输入select:
<div class="col-3 pr-0">
<select asp-for="@Model.RowsPerPage" class="form-control" onchange="onChangeRowsPerPageSelect()" id="rowsPerPageSelect">
<option value="">Select</option>
<option value="10">10</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="500">500</option>
<option value="1000">1000</option>
</select>
</div>
下面是列表视图的列 header 之一,单击它时将调用页面模型中的 OnGet 以及相关的排序依据和过滤器 url。
<th>
<a asp-page="./Index" asp-route-sortOrder="@Model.NameSort"
asp-route-rowsPerPage="10"
asp-route-currentFilter="@Model.CurrentFilter">
@Html.DisplayNameFor(model => model.TcpServer[0].Name)
</a>
</th>
在上面的 table header 代码中,您可以看到我已经将 asp-route-rowsPerPage 的值硬编码为 10,这可行,但我坚持的是如何从 select 下拉框中获取 selected 值?
您可以在 select 的 onchange 事件中动态更改 link 的 href
属性:
为 a
标签添加 id
(或名称)属性:
<a id="testLink" asp-page="./Index" asp-route-sortOrder="@Model.NameSort"
asp-route-rowsPerPage="10"
asp-route-currentFilter="@Model.CurrentFilter">
@Html.DisplayNameFor(model => model.TcpServer[0].Name)
在onchange
事件中修改href link :
<script>
function onChangeRowsPerPageSelect() {
var selectedValue = $("#rowsPerPageSelect").val();
var url = $("#testLink").attr("href").split('&');
url[1] = "rowsPerPage=" + selectedValue;
$("#testLink").attr('href', url.join('&'));
}
将 select 放入表单中并让它提交 onchange 事件:
<form method="get">
<select asp-for="@Model.RowsPerPage" onchange="this.form.submit()">
<!-- options... -->
</select>
<!-- put other filters inside the form as well -->
</form>
从模型中获取 RowsPerPage
值:
<a asp-route-rowsPerPage="@Model.RowsPerPage"
.
.
.>
@Html.DisplayNameFor(model => model.TcpServer[0].Name)
</a>
在后端,您应该使用 OnGet()
方法并为 RowsPerPage
启用绑定:
public class IndexModel : PageModel
{
[BindProperty(SupportsGet = true)]
public int RowsPerPage { get; set; } = 10;
// Do the same for other filters...
public void OnGet()
{
// ...
}
}
我有一个下拉列表 select,其中包含我在剃刀列表中使用的每页行的值。剃须刀列表已配置分页、排序和过滤。
这里输入select:
<div class="col-3 pr-0">
<select asp-for="@Model.RowsPerPage" class="form-control" onchange="onChangeRowsPerPageSelect()" id="rowsPerPageSelect">
<option value="">Select</option>
<option value="10">10</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="500">500</option>
<option value="1000">1000</option>
</select>
</div>
下面是列表视图的列 header 之一,单击它时将调用页面模型中的 OnGet 以及相关的排序依据和过滤器 url。
<th>
<a asp-page="./Index" asp-route-sortOrder="@Model.NameSort"
asp-route-rowsPerPage="10"
asp-route-currentFilter="@Model.CurrentFilter">
@Html.DisplayNameFor(model => model.TcpServer[0].Name)
</a>
</th>
在上面的 table header 代码中,您可以看到我已经将 asp-route-rowsPerPage 的值硬编码为 10,这可行,但我坚持的是如何从 select 下拉框中获取 selected 值?
您可以在 select 的 onchange 事件中动态更改 link 的 href
属性:
为
a
标签添加id
(或名称)属性:<a id="testLink" asp-page="./Index" asp-route-sortOrder="@Model.NameSort" asp-route-rowsPerPage="10" asp-route-currentFilter="@Model.CurrentFilter"> @Html.DisplayNameFor(model => model.TcpServer[0].Name)
在
onchange
事件中修改href link :<script> function onChangeRowsPerPageSelect() { var selectedValue = $("#rowsPerPageSelect").val(); var url = $("#testLink").attr("href").split('&'); url[1] = "rowsPerPage=" + selectedValue; $("#testLink").attr('href', url.join('&')); }
将 select 放入表单中并让它提交 onchange 事件:
<form method="get">
<select asp-for="@Model.RowsPerPage" onchange="this.form.submit()">
<!-- options... -->
</select>
<!-- put other filters inside the form as well -->
</form>
从模型中获取 RowsPerPage
值:
<a asp-route-rowsPerPage="@Model.RowsPerPage"
.
.
.>
@Html.DisplayNameFor(model => model.TcpServer[0].Name)
</a>
在后端,您应该使用 OnGet()
方法并为 RowsPerPage
启用绑定:
public class IndexModel : PageModel
{
[BindProperty(SupportsGet = true)]
public int RowsPerPage { get; set; } = 10;
// Do the same for other filters...
public void OnGet()
{
// ...
}
}