在我的网络应用程序中,我有一个页面,其中包含管理员批量批准或拒绝的“请求”列表。所以页面看起来像:
[x] Request 1
[ ] Request 2
[x] Request 3
[ ] Request 4
[Approve Selected] [Deny Selected]
我的模型看起来像:
public class RequestManagementModel
{
public List<string> LicenseIdsToProcess { get; set; }
public List<Resource> Resources { get; set; }
// additional fields
}
在我看来,我有:
int counter = 0;
@foreach (Resource r in Model.Resources)
{
<tr>
<td>
@Html.CheckBoxFor(model => model.LicenseIdsToProcess[counter++], new { value = r.RequestId })
</td>
</tr>
}
当然我的控制器动作接受表单上的模型
public ActionResult ProcessRequests(RequestManagementModel model, ProcessType type)
{
// process requests here
}
所以,正如您所料,我在model.LicenseIdsToProcess[counter++]
的视图中收到一条错误,指出“无法将类型'字符串'隐式转换为'bool'”。它不喜欢这样的事实:我试图使用复选框来表示用户可以从中选择一个或多个的值列表,而不是单个true / false。
我希望这样设置,以便对于用户选择的每个复选框,该字符串id值在发布表单时绑定到模型中的id列表。我知道如何使用<input type="checkbox">
来完成它,因为我可以在那里设置复选框的值。但有没有办法使用它与Html.CheckBoxFor通过模型绑定实现强类型?
感谢。
答案 0 :(得分:4)
您的清单必须是:
public class RequestManagementModel
{
public Dictionary<string, bool> LicenseIdsToProcess { get; set; }
public List<Resource> Resources { get; set; }
// additional fields
}
由于LicenseIdsToProcess
当前是List<string>
Html.CheckBoxFor()无法将字符串值转换为bool值。你需要使用类似字典或列表的东西,例如
public class Licence
{
public string Id { get; set; }
public bool Processed { get;set; }
}
public class RequestManagementModel
{
public List<Licence> LicenseIdsToProcess { get; set; }
public List<Resource> Resources { get; set; }
// additional fields
}
int counter = 0;
@foreach (Resource r in Model.Resources)
{
<tr>
<td>
@Html.CheckBoxFor(model => model.License[counter++].Processed, new { value = r.RequestId })
</td>
</tr>
}
或类似的东西:)
编辑:
在回复评论时,我发现我的代码不正确。这是更新版本:
@for(int idx = 0; idx < Model.Resources.Count; idx++)
{
<tr>
<td>
@Html.CheckBoxFor(model => model.License[idx].Processed, new { value = Model.Resources[idx].RequestId })
</td>
</tr>
}