繁体   English   中英

在asp.net mvc 3中发布错误消息

[英]Error message on post in asp.net mvc 3

我在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>

这是我的路线:

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
        );

    }

这是我的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));

现在,当我单击保存时,出现此错误:

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

我想在我的帖子中传递一个参数,但是我该怎么做,有人可以解释,因为我对此没有经验。

您应该像这样修复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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM