我是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>
答案 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的参数。