如何使用替代选定项设置和下拉列表 html 标记

本文关键字:设置 下拉列表 html 标记 何使用 | 更新日期: 2023-09-27 18:36:40

我创建了这个类来使用它进行分页,我正在尝试为每页的记录制作下拉列表并在刷新时保存值,我已经在 jquery 中做到了,但我想了解是否可以在没有 javascript 的情况下完成,只是为了好玩,默认值"15"我想让它动态化。属性 PageSize 具有列表的选定页面大小的当前值,我在控制器中设置了该值。

public class SortingPagingInfo
{
    public string SortField { get; set; }
    public string SortDirection { get; set; }
    public int PageSize { get; set; }
    public int PageCount { get; set; }
    public int CurrentPageIndex { get; set; }
    public int RecordCount { get; set; }
    public SelectList ItemsPerPageList
    { 
      get 
      { return (new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }
            .Select(x => new {value = x, text = x}), 
            "value", "text", "15")); 
      } 
    }
}

在视图中:

@{
ViewBag.Title = "Socios";
SortingPagingInfo info = ViewBag.SortingPagingInfo;}    
<td>@Html.DropDownList("ItemsPerPage", info.ItemsPerPageList, new { @id = "ItemsPerPageList" })</td>
@Html.Hidden("PageSize", info.PageSize)

我想将该行更改为类似 @Html.DropDownList("ItemsPerPage", info.ItemsPerPageList, new { @id = "ItemsPerPageList" }, new {@selected = info.页面大小})我知道这是错误的=)只是一个例子。

然后我有这个 javascript 用于提交下拉更改:

$("#ItemsPerPageList").change(function (evt) {
        $("#PageSize").val(evt.target.value);
        evt.preventDefault();
        $("form").submit();
    });

在控制器中:

[HttpPost]
    public ActionResult Index(SortingPagingInfo info)
    {
        ...
        ViewBag.SortingPagingInfo = info;
        return View(persona.ToList());
    }

我知道我可以在 js 中做到这一点(它正在工作),只需在页面加载中使用此简单的行:

$("#ItemsPerPageList").val($("#PageSize").val());

解决我的问题,但不是问题的答案:

我所做的是修改类以具有默认值的页面大小的私有属性,稍后可以在视图中进行更改:

public class SortingPagingInfo
{
    public string SortField { get; set; }
    public string SortDirection { get; set; }
    public int PageSize
    {
        get { return _pageSize; }
        set { _pageSize = value; }
    }
    private int _pageSize = 15;
    public int PageCount { get; set; }
    public int CurrentPageIndex { get; set; }
    public int RecordCount { get; set; }
    public SelectList ItemsPerPageList
    {
      get          { return (new SelectList(new[] { "10", "15", "25", "50", "100", "1000" }
            .Select(x => new {value = x, text = x}),
            "value", "text", _pageSize)); 
      } 
    }
}

现在在控制器操作结果(不是 http 帖子)中,我可以修改信息。页面大小以替换默认大小。

如何使用替代选定项设置和下拉列表 html 标记

您需要

发布到保存此值SortingPageInfo上的实际属性:

@Html.DropDownListFor(m => info.PageSize, info.ItemsPerPageList, ...)

然后,下拉列表将自动选择为该属性设置的任何内容。目前的问题是您没有以任何方式通过帖子保留所选值。