如何根据asp.net MVC中复选框的值更改搜索参数?

时间:2017-03-14 21:04:42

标签: asp.net-mvc asp.net-mvc-4

我是MVC菜鸟所以请耐心等待,我习惯使用网络表单。我有一个管理员可以查看所有用户的页面。现在它显示所有用户,非活动和活动。我可以默认只显示活动用户,但我希望有一个可以单击的复选框,以显示非活动用户。我希望在选中或取消选中该框后立即进行更改。

在视图中:

@Html.CheckBox("ShowInactive")  <label for="inactvCheckBox">Show Inactive Users</label>

在控制器中:

public ActionResult Index(bool ShowInactive)
{

    var users = (ShowInactive) ? db.Users.OrderBy(u => u.LastName) :
        db.Users.Where(u => u.Active == 1).OrderBy(u => u.LastName);
    return View(users.ToList());
}

显然,我这样做的方式不起作用,但我不确定我缺少什么。索引没有收到ShowInactive的值,我得到一个空参数输入错误。

编辑:显然我需要一些javascript来处理click事件,然后将复选框状态传递给控制器​​;我想我认为它会自动链接参数名称是相同的。我尝试在下面添加以下javascript,但它不起作用。再说一遍,我可能写错了,但我的Google-fu失败了。

<script type="text/javascript">
        $(document).ready(function () {
            $('#ShowInactive').change(function () {
                $("form").attr("Index", "/User/Index");
                $("form").submit();
            });
        });
</script>

2 个答案:

答案 0 :(得分:1)

好吧,我明白了。我实际上并不需要通过控制器处理任何事情,我只是将所有用户加载到列表中,然后向未激活的用户添加了一个隐藏类。然后在复选框上单击我使用javascript切换隐藏的行。每次单击复选框时,它都比重新加载视图更快。唯一的问题是,当隐藏非活动用户时,它会混乱交替的行颜色,但这个页面只是由站点管理员查看,所以没什么大不了的。

控制器:

public ActionResult Index()
{
    var users = db.Users.OrderBy(u => u.LastName);
    return View(users.ToList());
}

查看:

@Html.CheckBox("ShowInactive", false, new { id = "ShowInactive" }) <label>Show Inactive Users</label> 

[...]

@foreach (var item in Model.OrderBy(u => u.LastName).ThenBy(u => u.FirstName))
{
   <tr @if(item.Active != 1) { <text>class="inactive hidden"</text>}>
   [row data stuff]
   </tr>
}

Javascript in view:

<script type="text/javascript">
    $(document).ready(function () {
        $('#ShowInactive').change(function () {
            $(".inactive").toggleClass("hidden");
        });
    });
</script>

答案 1 :(得分:0)

将复选框更改为:

@Html.CheckBox("ShowInactv")

从而匹配Action的参数。