2012-11-28 166 views
0

我在我的asp.net MVC應用程序中這兩種操作方法:錯誤消息3

public ActionResult Edit(int id) 
    { 
     cpd_certificates cpd_certificates = db.Certificate.Find(id); 

     return View(cpd_certificates); 
    } 

    // 
    // POST: /Home/Edit/5 


    [HttpPost] 
    public ActionResult Edit(cpd_certificates cpd_certificates) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Entry(cpd_certificates).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Details"); 
     } 

     return View(cpd_certificates); 
    } 

這是paremeters如何傳遞:

@Html.ActionLink("Edit", "Edit", new { id=item.CertificateNo }) 
下面

是調用這兩個方法上面我的部分觀點:

@model IEnumerable<onlineCPD.Models.cpd_certificates> 
<table> 
<tr> 
    <th> 
     QuizNo 
    </th> 
    <th> 
     Received 
    </th> 
@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.QuizNo) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Received) 
    </td> 
    <td> 
     @Html.ActionLink("Edit", "Edit", new { id=item.CertificateNo }) 
</td> 
} 

</table> 

這是我的路線:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

這是我的詳細方法的部分代碼。

public ActionResult Details(string sortOrder, string currentFilter, string searchString, int? page, int id) 
     { 
var certificateDetails = db.Certificate.Where(p => p.ID == id); 
return View(certificateDetails.ToPagedList(pageNumber, pageSize)); 

現在,當我點擊保存,我得到這個錯誤:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(System.String, System.String, System.String, System.Nullable`1[System.Int32], Int32)' in 'onlineCPD.Controllers.HomeController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters

我想傳遞一個參數在我的職位,但我怎麼做到這一點,可以有人爲我只是沒有經驗解釋這裏。

+0

你可以在你的視圖中顯示設置表單的代碼(這是由第e保存按鈕)? –

+0

你能把它放在主帖中嗎,所以我可以真正閱讀它? –

+1

好的,你只需要使用默認路由即可。 – MVCKarl

回答

3

您應該解決Edit方法是這樣的:

[HttpPost] 
public ActionResult Edit(cpd_certificates cpd_certificates) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(cpd_certificates).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Details", new { id = cpd_certificates.id }); 
    } 

    return View(cpd_certificates); 
} 

在你的ActionLink做到這一點:

@Html.ActionLink("Edit", "Edit", new { id=item.QuizNo }) 

或可選擇地嘗試改變細節簽名可接受空值的ID,像這樣:

Details(string sortOrder, string currentFilter, string searchString, int? page, int? id) 
+0

我看到了,但是它傳遞的是主鍵而不是另一個在這個模型列表中的值。到方法詳細信息我希望它通過說QuizNo這是列表項目之一,而不是它通過一個PK。我在Details中使用它來查詢和顯示某個視圖。 – Sithelo

+0

在什麼問題?通過QuizNo而不是id,或者嘗試添加新的參數quizNo並在其中傳遞數字,是您尋求的是什麼? – testCoder

+0

是的,這就是我想要通過測驗否到詳細信息。不是通過PK,而是其中的一項價值。 – Sithelo