首页 > 解决方案 > ASP。NET 复选框 onchange

问题描述

我有一个页面显示从数据库中提取的数据表。过滤数据以显示最近 6 个月的数据。我想在页面上放置一个复选框,用户可以单击该复选框在查看所有数据从所有时间到过滤的最近 6 个月数据之间切换。这是我到目前为止所拥有的:

HTML:

<input type="checkbox" name="datefilter" class="form-check-input" onChange="this.form.submit()">
Display All Time Data

控制器:

    public ActionResult Index(string[] datefilter, string SearchString, string sortOrder, int? page)
    {
        DateTime testDate = DateTime.Now.AddMonths(-3);
        var PatientID = from p in db.PatientTbls
                        select p;
        if (datefilter == null)
        {
            PatientID = PatientID.Where(s => s.CreationDate >= testDate);
        }
        PatientID = PatientID.OrderByDescending(s => s.CreationDate);
        if (!String.IsNullOrEmpty(SearchString))
        {
            PatientID = PatientID.Where(s => s.ReadOnModel.Contains(SearchString) || s.ToBeMarkedOnLaser.Contains(SearchString) || s.Brand.Contains(SearchString));
        }
        return View(PatientID.ToList().ToPagedList(page ?? 1, 150));
    }

我的想法是让复选框重新提交带有新检查值的表单,然后“if”语句将过滤或不过滤结果。问题是当我选中该框时,它会刷新页面,然后清除该复选框。同样,一旦我选中该框一次,它就永远不会运行日期过滤器查询。任何帮助都会很棒。

PS。我对这一切都很陌生,所以请多多包涵。

标签: c#asp.net-mvccheckbox

解决方案


好吧尝试 OnMouseUp / Down... - OnChange 可能为时已晚...


您可以使用 AJAX 来调用操作 - 简单地说,例如:

 function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
    }
  xhttp.open("GET", "/controller/filteredindex ...", true);
  xhttp.send();
}

A)您可以使用 RAZOR ... 准备路径,其中过滤索引只是返回要显示的正确数据。

B)您还可以查询操作中的复选框状态......以创建更新的正确视图。如果您覆盖(视图)模型中的复选框,则设置或重置它很简单。所以返回的视图显示了你想要的一切。

AJAX 来自:https ://www.w3schools.com/js/js_ajax_intro.asp 最好的问候,奥利弗


推荐阅读