asp.net MVC 3でCRUDアプリケーションを作成しました。インデックスページには、データベースからのすべてのデータがテーブルに表示されています。ただし、[編集]、[詳細]、または [削除] をクリックすると、次のエラーが表示されます。
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Delete(Int32)' in 'cpd.Controllers.Default4Controller'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
テーブルをモデル化する 2 つのクラスがあります。私は最初にコードを使用しました。以下は私のクラスのコードです。
public class cpd_certificates
{
[Key]
public int CertificateNo { get; set; }
public int QuizNo { get; set; }
public DateTime? DateReceived { get; set; }
public DateTime? DatePaid { get; set; }
public string Mark { get; set; }
public int? AccreditationNo { get; set; }
public int? ID { get; set; }
public virtual cpd_recipients Recipients { get; set; }
}
public class cpd_recipients
{
[Key]
public int ID { get; set; }
public string OpNo { get; set; }
[Required]
[StringLength(50, ErrorMessage = "{0} cannot exceed {1} characters")]
public string LastName { get; set; }
public string Initials { get; set; }
public string Title { get; set;}
public string Address1 {get; set;}
public string Address2 {get; set;}
public string Address3 {get; set;}
public string Address4 {get; set;}
public string Country {get; set;}
public string email {get; set;}
}
これは 0..1 から多にマップされます。私の流れるような API は以下のとおりです。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<cpd_certificates>()
.HasOptional(x => x.Recipients);
}
コントローラーコードの一部:
public ActionResult Edit(int id)
{
cpd_certificates cpd_certificates = db.Cert.Find(id);
ViewBag.ID = new SelectList(db.CPD, "ID", "OpNo", cpd_certificates.ID);
return View(cpd_certificates);
}
// POST: /Default4/Edit/5
public ActionResult Edit(cpd_certificates cpd_certificates)
{
if (ModelState.IsValid)
{
db.Entry(cpd_certificates).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ID = new SelectList(db.CPD, "ID", "OpNo", cpd_certificates.ID);
return View(cpd_certificates);
}
ビューからのコード:
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
地図ルート:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Default4", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
このエラーを解決するにはどうすればよいですか。私はこれに関しては比較的未経験です。