ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

ASP.NET MVC 2 モデルについて(3)

もう一つ、モデルバインディングを使用して、データの登録を行う例です。

1.入力した値をデータベースに登録する場合・・・
f:id:UnderSourceCode:20130504110357j:plain

2.画面からデータを受け取り、データベースに渡すモデルをつくり・・・


public class EntryModel
{
public int Id { get; set; }

[Required(ErrorMessage = "名前を入力してください。")]
[StringLength(15, ErrorMessage = "名前は{1}文字以内で入力してください。")]
public string Name { get; set; }

[Required(ErrorMessage = "ふりがなを入力してください。")]
[StringLength(30, ErrorMessage = "ふりがなは{1}文字以内で入力してください。")]
public string NameKana { get; set; }

[Required(ErrorMessage = "年齢を入力してください。")]
[Range(20, 80, ErrorMessage = "{1}歳以上、{2}歳以下の方のみ申込できます。")]
public int? Age { get; set; }

[Required(ErrorMessage = "メールアドレスを入力してください。")]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "正しいメールアドレスを入力してください")]
public string Email { get; set; }

public int PartyId { get; set; }
public string PartyName { get; set; }
}

3.モデルに格納した値をデータベースに登録する部分・・・


public class EntryDAL
{
public int Create(EntryModel entry)
{
StringBuilder sql = new StringBuilder();
sql.Append("insert into Entry ");
sql.Append("( ");
sql.Append(" ID, ");
sql.Append(" Name, ");
sql.Append(" NameKana, ");
sql.Append(" Email, ");
sql.Append(" PartyID, ");
sql.Append(" CreateDateTime ");
sql.Append(") ");
sql.Append("values ");
sql.Append("( ");
sql.Append(" @ID, ");
sql.Append(" @Name, ");
sql.Append(" @NameKana, ");
sql.Append(" @Email, ");
sql.Append(" @PartyID, ");
sql.Append(" @CreateDateTime ");
sql.Append(") ");

SqlParameter[] parameters = new SqlParameter[6];
parameters[0] = new SqlParameter("@ID", entry.Id);
parameters[1] = new SqlParameter("@Name", entry.Name);
parameters[2] = new SqlParameter("@NameKana", entry.NameKana);
parameters[3] = new SqlParameter("@Email", entry.Email);
parameters[4] = new SqlParameter("@PartyID", entry.PartyId);
parameters[5] = new SqlParameter("@CreateDateTime", DateTime.Now);

using (DataAccess dataAccess = new DataAccess(System.Configuration.ConfigurationManager.ConnectionStrings["WhiskyTastingDB"].ConnectionString))
{
return dataAccess.ExecuteNonQuery(sql.ToString(), parameters);
}
}
}

4.コントローラで、ビューよりモデルを受け取り、3.に渡すことで登録する・・・


[HandleError]
public class EntryController : Controller
{
//
// POST: /Entry/Create

[HttpPost]
public ActionResult Create(EntryModel entry)
{
// TODO: Add insert logic here
if (ModelState.IsValid)
{
DAL.EntryDAL entryDal = new DAL.EntryDAL();
entry.Id = entryDal.GetCount() + 1;
int result = entryDal.Create(entry);
ViewData["Message"] = "試飲会への申込を完了しました。試飲会の主催者よりメールにて連絡させていただきます。";
return View("Complete", entry);
}
else
{
ViewData["PartyName"] = entry.PartyName;
return View(entry);
}
}
}

5.画面より値を入力すると・・・
f:id:UnderSourceCode:20130504110414j:plain

6.コントローラのアクションでは、画面で入力した内容を、モデルのプロパティにて参照できる・・・
f:id:UnderSourceCode:20130504110425j:plain

7.登録完了
f:id:UnderSourceCode:20130504110439j:plain