在 ASP.NET MVC 中使用 DataTable 进行基架






4.25/5 (7投票s)
本文演示了使用 DataTable 存储数据的 ASP.NET MVC 基架。
引言
ASP.NET 基架是 ASP.NET MVC 中的一项新功能,借助它,您可以创建基于数据的 Web 应用程序,与数据存储交互并快速轻松地执行添加、删除、编辑和显示操作。
基架自动生成用于列表、显示、添加、删除和编辑数据的默认模板,这些模板稍后可以根据应用程序需求进行自定义。
数据可以存储在各种位置,例如,数据库表、数据表、XML 文件,甚至纯文本文件。 在本文中,我将演示使用数据表的 ASP.NET MVC 基架的工作原理。
背景
一个 MVC 应用程序由以下组件组成
- 模型:模型是一个类,它表示数据并实现数据处理的逻辑。
- 视图:视图显示基于模型类的应用程序的用户界面。 使用视图,用户可以添加、删除或编辑数据。
- 控制器:控制器管理用户输入的数据,并根据数据控制向用户显示哪些视图。
Using the Code
可以通过从“新建项目”对话框中选择“ASP.NET MVC 4 Web 应用程序”模板来创建 ASP.NET MVC 应用程序,如下所示
可以通过从结果对话框中选择空模板来创建一个空项目,如下所示
通过右键单击解决方案资源管理器中的模型文件夹并选择“添加”选项来添加一个名为 Person 的模型类,如下所示
模型数据由以下模型类表示
public class Person
{
public int Code
{
get;
set;
}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
通过右键单击控制器文件夹并选择“添加”选项来添加一个名为PersonController
的控制器,如下所示
从“添加控制器”对话框中,我们在基架选项中选择“带有空的读/写操作的 MVC 控制器”模板,如下所示
控制器类 (PersonController
) 中的以下类级别声明创建一个 static datatable
对象来存储模型数据
static DataTable dt = new DataTable();
以下构造函数定义了 datatable
的结构
public PersonController()
{
if (dt.Columns.Count == 0) // if no columns defined
{
dt.Columns.Add(new DataColumn("Code", typeof(int))); // Adding column for the Code attribute
dt.Columns.Add(new DataColumn("Name", typeof(string))); // Adding column for the Name attribute
dt.Columns.Add(new DataColumn("Age", typeof(int))); // Adding column for the Age attribute
DataColumn[] pk = new DataColumn[1];
pk[0] = dt.Columns[0]; // Specifying Code as the Primary Key
dt.PrimaryKey = pk;
}
}
以下 Index()
操作方法用于显示 Person
对象列表
public ActionResult Index()
{
List<Person> lstPerson = new List<Person>(); // Creating a list of Person objects
foreach (DataRow dr in dt.Rows)
{
Person p = new Person(); // Creating a Person object
// Setting the column values
p.Code = Convert.ToInt32(dr[0].ToString());
p.Name = dr[1].ToString();
p.Age = Convert.ToInt32(dr[2].ToString());
lstPerson.Add(p); // Populating the list
}
return View(lstPerson); // Returning the data to be displayed by the Index view
}
上面的代码从数据表中读取数据行并填充一个 List
对象。 然后它通过索引视图显示列表。
可以通过右键单击控制器中的操作方法并选择“添加视图”选项,然后从“添加视图”对话框中选择相应的模板来添加视图,如下所示
以下是索引视图的输出
要创建一个新的 Person
对象,使用带有 HttpGet
属性的 Create
方法。 以下 Create()
方法显示创建新 Person
对象所需的用户界面
public ActionResult Create()
{
return View();
}
上面的代码显示了一个创建视图,如下所示
要保存在创建视图中输入的数据,需要另一个带有 HttpPost
属性的 Create 操作方法,如下所示
[HttpPost]
public ActionResult Create(Person p)
{
DataRow dr = dt.NewRow(); // Creating a new Data Row
// Setting values for the columns
dr[0] = p.Code;
dr[1] = p.Name;
dr[2] = p.Age;
dt.Rows.Add(dr); // Adding Data Row to the Data Table
return RedirectToAction("Index"); // Displaying the index view
}
上面的代码为数据表创建一个新的数据行,使用在 Person
对象中输入的数据初始化行中的数据,并将该行添加到数据表中。
同样,需要以下两个 Edit 操作,一个带有 HttpGet
属性,另一个带有 HttpPost
属性来编辑 Person
详细信息
public ActionResult Edit(int id)
{
DataRow dr = dt.Rows.Find(id); // Finding Person in the data table using primary key
Person p = new Person(); // Creating a new Person object
// Setting attribute values
p.Code = Convert.ToInt32(dr[0].ToString());
p.Name = dr[1].ToString();
p.Age = Convert.ToInt32(dr[2].ToString());
return View(p); // Returning data
}
[HttpPost]
public ActionResult Edit(int id, Person p)
{
DataRow dr = dt.Rows.Find(id); // Finding Person
// Editing data in data row
dr[0] = p.Code;
dr[1] = p.Name;
dr[2] = p.Age;
return RedirectToAction("Index"); // Displaying the index view
}
以下是编辑视图
以下两个函数可用于删除 Person 记录
public ActionResult Delete(int id)
{
DataRow dr = dt.Rows.Find(id);
Person p = new Person();
p.Code = Convert.ToInt32(dr[0].ToString());
p.Name = dr[1].ToString();
p.Age = Convert.ToInt32(dr[2].ToString());
return View(p);
}
[HttpPost]
public ActionResult Delete(int id, Person p)
{
DataRow dr = dt.Rows.Find(id); // Find Person
dt.Rows.Remove(dr); // Delete data row
return RedirectToAction("Index");
}
以下是删除视图
可以使用以下 Details
视图显示 Person
记录
public ActionResult Details(int id)
{
DataRow dr = dt.Rows.Find(id);
Person p = new Person();
p.Code = Convert.ToInt32(dr[0].ToString());
p.Name = dr[1].ToString();
p.Age = Convert.ToInt32(dr[2].ToString());
return View(p);
}
上面的代码使用主键搜索 Person
行,并创建一个填充了该行值的 Person
对象。
以下是 Details
视图
RouteConfig.cs 文件中的以下代码用于指定默认的控制器和操作
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Person", action = "Index", id = UrlParameter.Optional }
);
}
关注点
我使用 Microsoft Visual Studio Express 2013 for Web 创建了演示项目。
本文是基架如何工作的一个简单演示。 要创建一个更实用和真实的应用程序,您需要将数据存储在数据库中以进行持久存储。