我遇到了一个问题,即我在视图中呈现的所有复选框都会被检查出来。我在构建视图模型的行上放置了一个断点,通过调试器,我可以看到一些值被设置为" true"和其他人被设置为" false"。因此,我假设的问题必须在视图中。
这是我的模特:
public class UserModulesAdministrationViewModel
{
public bool AccessGranted { get; set; }
public int ModuleId { get; set; }
public string ModuleName { get; set; }
public string ModuleDescription { get; set; }
}
这是我的控制器正在呈现列表:
public ActionResult UserModules(int id)
{
// Database stuff here
var model = modules.Select(module => new Infrastructure.ViewModels.UserModulesAdministrationViewModel
{
ModuleId = module.AccessModuleId,
AccessGranted = userModules.Any(z => z.AccessModuleId == module.AccessModuleId),
ModuleName = module.ModuleName,
ModuleDescription = module.ModuleDescription
}).ToList();
return View(model);
}
最后这是我的相关视图代码:
@model IEnumerable<UserModulesAdministrationViewModel>
@foreach (UserModulesAdministrationViewModel m in Model)
{
<div class="col-md-4" style="margin-top: 15px;">
<div class="moduleBlockLong" style="position: relative">
<div class="moduleHeader">@m.ModuleName</div>
<div class="moduleText">@m.ModuleDescription</div>
<div class="checkbox" style="position: absolute; bottom: 0; right: 80px">
<label>
@{
var m1 = m;
}
@Html.CheckBoxFor(z => m1.AccessGranted )
<input type="checkbox" value="" checked="checked"/> Allow Access
</label>
</div>
</div>
</div>
}
答案 0 :(得分:3)
在我看来,问题就像你在 taskdet.sort((a, b) -> {
int r = a.date - b.date;
return r == 0 ? r : a.id - b.id;
});
CheckBoxFor
之后对输入进行了硬编码。
HtmlHelper
卸下:
@Html.CheckBoxFor(z => m1.AccessGranted )
<input type="checkbox" value="" checked="checked"/>
还值得注意的是,当您使用<input type="checkbox" value="" checked="checked"/>
循环而不是foreach
循环时,您将无法将所选值发布回服务器。
您需要按如下方式索引循环:
for
或者您将无法读取服务器上的任何用户输入。
答案 1 :(得分:1)
我认为这是因为你离开了<input type="checkbox" value="" checked="checked"/>
删除它,它会工作。
还存在关于foreach
循环的另一个问题。
ASP.NET MVC 4 - for loop posts model collection properties but foreach does not
解决方案:
@for(var i = 0; i<Model.Count; i++)
{
<div class="col-md-4" style="margin-top: 15px;">
<div class="moduleBlockLong" style="position: relative">
<div class="moduleHeader">@Model[i].ModuleName</div>
<div class="moduleText">@Model[i].ModuleDescription</div>
<div class="checkbox" style="position: absolute; bottom: 0; right: 80px">
<label>
@Html.CheckBoxFor(z => Model[i].AccessGranted) Allow Access
</label>
</div>
</div>
</div>
}
答案 2 :(得分:1)
在您的视图中,删除
<input type="checkbox" value="" checked="checked"/> Allow Access
由于checked="checked"
,这将始终打印出已选中复选框。
答案 3 :(得分:0)
试试这段代码......
而不是:<input type="checkbox" value="" checked="checked"/> Allow Access
尝试:
<input type="checkbox" value="" checked="@m.AccessGranted "/> Allow Access
此外,请勿使用m1参数..