我正在开发一个页面,它在View上显示来自服务的数据,并允许用户对其进行过滤。 国家/地区有一列允许用户过滤。
我无法找到创建复选框列表的方法,以便我可以在一个参数中抓取所有选定的值,例如string []国家/地区(在操作方法中)。
不能使用经典方式:
<input type="checkbox" name="countries" value="USA" />USA<br />
<input type="checkbox" name="countries" value="Canada" />Canada<br />
这确实传递了URL中的值,但没有在回发后设置它们(保持在后备检查)。
我尝试使用checkboxlist(http://goo.gl/TUvZzu)但似乎对我的模态很复杂。
因为我是一个非常直接的模型:
public string Title { get; set; }
public string Website { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string Zip { get; set; }
public string State { get; set; }
public string Country { get; set; }
感谢您的时间和帮助。
答案 0 :(得分:3)
您需要在视图模型中包含一组国家/地区,以保留所选值,并允许在帖子中发送这些值。
我还会创建一个Country对象来保存Id,Name和Selected值。
为了回发模型,你需要为视图中的每个项目编制索引,这样就可以让模型绑定器选择它。
<强>模型强>
public class AModel
{
public AModel()
{
Countries = new List<Country>();
}
public string Title { get; set; }
public string Website { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string Zip { get; set; }
public string State { get; set; }
public string Country { get; set; }
// Country collection
public List<Country> Countries { get; set; }
}
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
查看循环
@for(var i = 0; i < Model.Countries.Count; i++)
{
<dt>
@Html.HiddenFor(m => Model.Countries[i].ID)
@Html.HiddenFor(m => Model.Countries[i].Name)
@Html.CheckBoxFor(m => Model.Countries[i].Checked)
</dt>
<dd>
@Model[i].Name
</dd>
}
注意for循环而不是foreach来启用模型绑定,隐藏字段允许将值发布回控制器
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
控制器帖子
[HttpPost]
public ActionResult Index(AModel model)
{
//All the selected countries are available in the model
return View(model);
}