GridViewコンポーネントは、ASP.NETMVCアプリケーションでの使用を目的としたものではありません。このコンポーネントは、ASP.NETMVCに存在しなくなった概念であるViewStateとPostBackに大きく依存しています。
WebGrid helper
ビューにレコードを表示し、削除機能を提供するためにを使用できます。
したがって、最初のステップは、ビューに表示するレコードを表すモデルを設計することです。
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string SocialSecurity { get; set; }
}
次に、リレーショナルデータベースにクエリを実行してモデルを引き出すデータレイヤーを作成します。Entity FrameworkなどのORMを使用してこのタスクを簡略化するか、プレーンなADO.NETを直接使用することができます。これをここで説明します。
public class PeopleRepository
{
public IList<Person> Get()
{
var connectionString = ConfigurationManager
.ConnectionString["SomeConnectionStringKey"]
.ConnectionString;
using (var conn = new SqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id, fname, lname, ssn FROM people";
using (var reader = cmd.ExecuteReader())
{
var result = new List<Person>();
while (reader.Read())
{
result.Add(new Person
{
Id = reader.GetInt32(reader.GetOrindal("id")),
FirstName = reader.GetString(reader.GetOrindal("fname")),
LastName = reader.GetString(reader.GetOrindal("lname")),
SocialSecurity = reader.GetString(reader.GetOrindal("ssn"))
});
}
return result;
}
}
}
public void Delete(int id)
{
var connectionString = ConfigurationManager
.ConnectionString["SomeConnectionStringKey"]
.ConnectionString;
using (var conn = new SqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "DELETE FROM people WHERE id = @id";
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
}
}
}
次のステップは、モデルとビューの間の配線を行うコントローラーを用意することです。
public class PeopleController: Controller
{
private readonly PeopleRepository repo = new PeopleRepository();
public ActionResult Index()
{
IList<Person> model = repo.Get();
return View(model);
}
[HttpPost]
public ActionResult Delete(int id)
{
repo.Delete(id);
IList<Person> model = repo.Get();
return View("Index", model);
}
}
もちろん、最後のステップはビューです。
@model IList<Person>
@{
var grid = new WebGrid(Model);
}
@grid.GetHtml(
columns: grid.Columns(
grid.Column(columnName: "Id"),
grid.Column(columnName: "FirstName", header: "First name"),
grid.Column(columnName: "LastName", header: "Last name"),
grid.Column(columnName: "SocialSecurity", header: "Social Security Number"),
grid.Column(
header: "",
format:
@<text>
<form action="@Url.Action("Delete", "People", new { id = item.Id })" method="post" onsubmit="return confirm('Are you sure you want to delete this person?');">
<button type="submit">Delete</button>
</form>
</text>
)
)
)