【问题标题】:Razor Pages - How to insert a select dropdown value into an asp-route?Razor Pages - 如何将选择下拉值插入 asp-route?
【发布时间】:2020-04-24 08:57:51
【问题描述】:

我有一个下拉选择,其中包含我在剃刀列表中使用的每页行的值。剃刀列表已配置分页、排序和过滤。

这里的选择输入:

<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>

下面是列表视图的列标题之一,单击它时将调用页面模型中的 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>

在上面的表头代码中,您可以看到我已经硬编码了值为 10 的 asp-route-rowsPerPage,这可行,但我坚持的是如何从选择下拉列表中获取选定的值盒子?

【问题讨论】:

    标签: asp.net-core razor-pages


    【解决方案1】:

    将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()
        {
            // ...
        }
    }
    

    【讨论】:

    • 嗨 Laz,非常感谢您的帮助。我错过的一点是使用 "onchange="this.form.submit()" 在页面模型中设置 RowsPerPage 的值
    【解决方案2】:

    您可以在 select 的 onchange 事件中动态更改该链接的 href 属性:

    1. 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)
      
    2. onchange事件中修改href链接:

      <script>
      function onChangeRowsPerPageSelect() {
          var selectedValue = $("#rowsPerPageSelect").val();
      
          var url = $("#testLink").attr("href").split('&');
          url[1] = "rowsPerPage=" + selectedValue;
          $("#testLink").attr('href', url.join('&'));
      }
      

    【讨论】:

    • 嗨南,我决定去第一个答案,但非常感谢你的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2019-11-02
    • 2021-08-04
    • 2021-08-19
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多