我有一个MVC 3应用程序,其中一个页面用户可以请求有关我们服务的更多信息。
当用户从下拉列表中选择状态时,我想使用jQuery ajax来获取我们在该状态下提供的产品列表。对于每个产品,我想在产品名称旁边显示一个复选框。然后,用户可以选择他们感兴趣的产品。
我想将所选产品绑定到此视图的模型上的List属性。因此,模型将具有名称,电子邮件等属性和List属性。这是我试图绑定到的模型类的一个例子:
public class RequestInformationModel
{
public string Name { get; set; }
public string Email { get; set; }
public List<Product> Products { get; set; }
}
以下是我将表单发布到的控制器方法:
public ActionResult RequestInformation(RequestInformationModel model)
{
// do stuff
}
有关如何完成此任务的任何建议?非常感谢。
答案 0 :(得分:2)
如果您在产品对象中的字段名称前面加上列表名称及其索引在方括号中,那么MVC将为您绑定列表
E.g。
<input type="checkbox" name="Products[0].InterestedInCheckbox" />
<input type="checkbox" name="Products[1].InterestedInCheckbox" />
在这种情况下,Product对象需要一个名为InterestedInCheckbox
的bool属性你应该让序列索引从0开始才能使用这个方法(如果不是这样的话,你需要一个隐藏字段和稍微不同的技术)
最后,我使用Html Checkbox助手创建复选框,因为这将在所需复选框后输出隐藏字段:
(以下代码未经测试)
@for (var i = 0; i < Model.Count; i++)
{
@Html.CheckBox(string.Format("Products[{0}]", i), Model[i])
}
答案 1 :(得分:0)
我认为你想要的是这样的:
/* Handles ajax request */
[HttpPost]
public ContentResult(string selectedListBoxItem)
{
string content = "";
/* TODO: Query DB to get product suggestions based on selectedListBoxItem */
content = "<input type='checkbox' id='productId1' name='productSuggestion' value='productId1'>";
content += "<input type='checkbox' id='productId2' name='productSuggestion' value='productId2'>";
content += "<input type='checkbox' id='productId2' name='productSuggestion' value='productId2'>";
return Content(content);
}
/* Handles final submit */
[HttpPost]
public ActionResult HandleSubmit(string nameOfCheckboxCollection)
{
string[] arrayChecked = nameOfCheckboxCollection.Split(",");
foreach(string s in arrayChecked ) {
Model.addProduct(s);
}
}