C# asp.net mvc 3中发布的错误消息

C# asp.net mvc 3中发布的错误消息,c#,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc 3,Entity Framework,我在asp.net mvc应用程序中有以下两种操作方法: public ActionResult Edit(int id) { cpd_certificates cpd_certificates = db.Certificate.Find(id); return View(cpd_certificates); } // // POST: /Home/Edit/5 [HttpPost] public Acti

我在asp.net mvc应用程序中有以下两种操作方法:

  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);
    }
以下是参数传递的方式:

 @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>
这是my details方法的部分代码

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));
现在,当我单击“保存”时,出现以下错误:

参数字典包含“onlineCPD.Controllers.HomeController”中方法“System.Web.Mvc.ActionResult”详细信息(System.String,System.String,System.String,System.nullable`1[System.Int32],Int32])的非null类型“System.Int32”的参数“id”的null条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数


我想在我的帖子中传递一个参数,但我该怎么做?有人能解释一下吗,因为我在这里没有经验。

你应该像这样修改
编辑
方法:

[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);
}
Details(string sortOrder, string currentFilter, string searchString, int? page, int? id)
在actionlink中,执行以下操作:

 @Html.ActionLink("Edit", "Edit", new {   id=item.QuizNo  })
或者尝试更改id可接受的可为空值的详细签名,如下所示:

[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);
}
Details(string sortOrder, string currentFilter, string searchString, int? page, int? id)

您应该像这样修改
编辑
方法:

[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);
}
Details(string sortOrder, string currentFilter, string searchString, int? page, int? id)
在actionlink中,执行以下操作:

 @Html.ActionLink("Edit", "Edit", new {   id=item.QuizNo  })
或者尝试更改id可接受的可为空值的详细签名,如下所示:

[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);
}
Details(string sortOrder, string currentFilter, string searchString, int? page, int? id)


您能在视图中显示设置表单的代码吗(通过“保存”按钮完成)?您能把它放在主帖子中吗,这样我就可以真正阅读它了?好的,您只需要使用默认路径就可以了。@MVCKarl编辑说。这与“保存”按钮相同。你能显示你的
详细信息
操作的代码吗?你能在视图中显示设置表单的代码吗(通过“保存”按钮完成)?你能把它放在主帖子中吗,这样我就可以真正阅读它了?好的,那么你只需要使用默认路径就可以了。@MVCKarl编辑说。这与“保存”按钮相同。您可以显示
详细信息
操作的代码吗?我知道,它传递的是主键,而不是此模型列表中的另一个值。对于方法详细信息,我希望它传递列表项之一的QuizNo,而不是传递PK。我正在详细地使用它来查询和显示某个视图。这是一个什么问题?传递QuizNo而不是id,或者尝试在其中添加新参数QuizNo和传递编号,这就是您要寻找的吗?是的,这就是我要将QuizNo传递到细节的目的。不是要传递PK,而是在记录中传递它的一个值。您应该将
id
参数设置为可空类型,它将删除任何限制。我已经得到了它。假设传递的是@Html.ActionLink(“编辑”、“编辑”,new{id=item.QuizNo}),而不是@Html.ActionLink(“编辑”、“编辑”,new{id=item.CertificateNo})。我也接受了你的答案。但是,我明白了,它传递的是主键,而不是这个模型列表中的另一个值。对于方法详细信息,我希望它传递列表项之一的QuizNo,而不是传递PK。我正在详细地使用它来查询和显示某个视图。这是一个什么问题?传递QuizNo而不是id,或者尝试在其中添加新参数QuizNo和传递编号,这就是您要寻找的吗?是的,这就是我要将QuizNo传递到细节的目的。不是要传递PK,而是在记录中传递它的一个值。您应该将
id
参数设置为可空类型,它将删除任何限制。我已经得到了它。假设传递的是@Html.ActionLink(“编辑”、“编辑”,new{id=item.QuizNo}),而不是@Html.ActionLink(“编辑”、“编辑”,new{id=item.CertificateNo})。我也接受了你的回答。