使用 - ASP.NET MVC 4
用户界面就像 -
Select Product Code Product Name
Checkbox Product 1 Apple
Checkbox Product 2 Banana
Checkbox Product 3 Grapes
Submit Button
在提交按钮上单击我需要验证是否选中了复选框。如果没有,则显示消息 - 请选择一个产品。
如果选择,则在控制器中传递所选的产品代码&姓名&没有。复选框检查到另一页
我们如何在MVC 4中实现这一目标?
答案 0 :(得分:1)
首先,@Html.CheckboxFor(m => m.Checkbox, "Product 1")
将"Product 1"
指定为html属性,并将呈现<input length="9" type="checkbox" .../>
(已添加长度属性,其值等于文本中的字符数)。由于重复id
属性,它还会创建无效的html。并且[Required]
属性是没有意义的(bool是真或假,并且总是需要)。目前,您在复选框和产品之间没有任何关系。
您应该创建一个视图模型来表示您想要显示的内容
public class ProductVM
{
public bool IsSelected { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
控制器
public ActionResult Edit()
{
List<ProductVM> model = new List<ProductVM>()
{
new ProductVM() { Code = "Product 1", Name = "Apple" },
new ProductVM() { Code = "Product 2", Name = "Banana" },
new ProductVM() { Code = "Product 3", Name = "Grapes"}
};
return View(model);
}
[HttpPost]
public ActionResult Edit(List<ProductVM> model)
{
foreach(ProductVM item in model)
{
if (item.IsSelected)
{
string code = item.Code;
string name= item.Name;
}
}
}
查看
@model List<ProductVM>
@using(Html.BeginForm())
{
for(int i = 0; i < Model.Count; i++)
{
@Html.HiddenFor(m => m[i].Code)
@Html.HiddenFor(m => m[i].Name)
@Html.CheckBoxFor(m => m[i].IsSelected)
@Html.LabelFor((m => m[i].IsSelected, Model[i].Name)
}
<input type="submit" />
}
如果您想要客户端验证,您将必须编写自己的验证属性来实现IClientValitable
并编写相关的jquery验证方法(但这是单独问题的主题)