我是网络开发的新手。所以,对不起,如果这是我问的愚蠢问题。我正在根据从数据库中提取的可用过滤条件构建一个复选框列表。传递给我视图的模型有一个属性
public List<string> ServicesList{ get; set; }
我的视图代码包含一个循环,用于为列表中的每个项目创建一个复选框。
@foreach (string svc in Model.ServicesList)
{
if (svc != "")
{
<input type="checkbox" name="SelectedServices" title="@svc" value="@svc" checked="checked" /> @svc
<br />
}
}
我的控制器操作如下所示:
public ActionResult ServiceListExplorer(string[] SelectedServices, FormCollection fc)
{
}
只要将服务列表显示为复选框并且在控制器操作内具有访问权限,这将在用户检查一旦httppost发生后进行检查。但是,我有两个问题:
如何通过模型最初检查哪些项目?这将允许我保存他们的过滤条件并预先选择服务。我想也许我需要使用SelectList而不是List但不确定如何。
如何通过将“checked”属性绑定到模型中的值来使其“动态化”?
答案 0 :(得分:1)
首先,而不是ServicesList应该是不是字符串列表的对象列表:
public class Service
{
public string ServiceName {get; set;}
public bool isChecked {get;set;}
}
....
public List<Service> ServicesList{ get; set; }
....
//that controller will collect data posted from view
//(your form will post only checked checkboxes)
[HttpPost]
public JsonResult Update(FormCollection services)
{
foreach (string item in services)
{
System.Diagnostics.Debug.WriteLine(item);
}
return Json(services);
}
不在您的观点中:
@using (Html.BeginForm("Update", "Home", FormMethod.Post)) {
foreach (MvcMusicStore.Models.Service svc in Model)
{
@svc.ServiceName @Html.CheckBox(svc.ServiceName, svc.isChecked);
<br/>
}
<input type="submit" value="submit"/>
}
答案 1 :(得分:1)
您应该为例如
定义一个类,而不是创建字符串对象列表public class ServiceObject
{
public string Name{get;set;}
public bool IsChecked{get;set;}
}
然后你的代码将成为 -
public List<ServiceObject> ServicesList{ get; set; }
如果要选中复选框,则必须填写的IsChecked
属性为true:
然后这一行将成为 -
<input type="checkbox" name="SelectedServices" title="@svc" value="@svc" checked=Model.IsChecked />