在ASP.NET MVC中,CheckBoxList控件是一种常见的用户界面元素,用于允许用户从一组选项中选择多个值。本文将通过一个具体的例子,展示如何在ASP.NET MVC项目中实现CheckBoxList控件。
首先,需要创建一个数据模型来从数据库中检索数据。在这个例子中,将使用名为tblCity的表。以下是创建tblCity表及其数据插入的SQL脚本:
CREATE TABLE tblCity (
ID INT IDENTITY PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
IsSelected BIT NOT NULL
);
INSERT INTO tblCity VALUES ('London', 0);
INSERT INTO tblCity VALUES ('New York', 1);
INSERT INTO tblCity VALUES ('Sydney', 1);
INSERT INTO tblCity VALUES ('Mumbai', 0);
INSERT INTO tblCity VALUES ('Cambridge', 0);
目标是生成一个用户界面,允许用户选择一个或多个城市,然后点击提交按钮。如果用户没有选择任何城市,将显示一条消息提示用户。
按照以下步骤添加ADO.NET数据模型:
点击Finish按钮后,将创建一个模型,并且Web.config文件中也会自动添加一个连接字符串。
接下来,需要添加一个视图和编辑器模板。按照以下步骤操作:
在tblCity.cshtml文件中,复制并粘贴以下代码:
@model MVCDemo.Models.tblCity
@{
ViewBag.Title = "City";
}
@Html.HiddenFor(x => x.ID)
@Html.HiddenFor(x => x.Name)
@Html.CheckBoxFor(x => x.IsSelected)
@Html.DisplayFor(x => x.Name)
这段代码定义了一个编辑器模板,用于显示每个城市的复选框和名称。
现在,需要编写一个控制器来处理用户的请求。按照以下步骤添加HomeController:
using MVCDemo.Models;
using System.Text;
在HomeController中复制并粘贴以下代码:
[HttpGet]
public ActionResult Index()
{
SampleDBContext db = new SampleDBContext();
return View(db.Cities);
}
[HttpPost]
public string Index(IEnumerable<tblCity> cities)
{
if (cities.Count(x => x.IsSelected) == 0)
{
return "You have not selected any City";
}
else
{
StringBuilder sb = new StringBuilder();
sb.Append("You selected – ");
foreach (tblCity city in cities)
{
if (city.IsSelected)
{
sb.Append(city.Name + ", ");
}
}
sb.Remove(sb.ToString().LastIndexOf(", "), 1);
return sb.ToString();
}
}
这段代码定义了两个Index方法,一个用于处理GET请求,显示所有城市;另一个用于处理POST请求,处理用户的选择并显示结果。
最后,需要添加一个主视图来显示所有城市和提交按钮。按照以下步骤操作:
在Index.cshtml文件中,复制并粘贴以下代码:
@model IEnumerable<MVCDemo.Models.tblCity>
@{
ViewBag.Title = "Index";
}
<div style=”font-family:Arial”>
<h2>
Index
</h2>
@
using (Html.BeginForm())
{
@Html.EditorForModel()
<br />
<input type=”submit” value=”Submit” />
}
</div>
这段代码定义了一个主视图,用于显示所有城市的复选框和提交按钮。
现在,可以运行应用程序并看到以下界面:
当选择一些城市,比如New York和Sydney,然后点击提交按钮,将显示以下消息:
You selected – New York, Sydney