【问题标题】:Error message on post in asp.net mvc 3在 asp.net mvc 3 中发布错误消息
【发布时间】:2012-11-28 11:55:44
【问题描述】:

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

    }

这是我的详细信息方法的部分代码。

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 Details(System.String, System.String, System.String, System) 的不可空类型“System.Int32”的参数“id”的空条目'onlineCPD.Controllers.HomeController' 中的 .Nullable`1[System.Int32], Int32)'。可选参数必须是引用类型、可空类型或声明为可选参数。 参数名称:参数

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

【问题讨论】:

  • 您能否在视图中显示设置表单的代码(由“保存”按钮完成)?
  • 你能把它放在主帖里,这样我就可以真正阅读了吗?
  • 好的,所以你只是使用默认路由就可以了。
  • @MVCKarl 它的编辑说 localhost:11074/Home/Edit/89376 。这与保存按钮相同。
  • 你能显示你的Details操作的代码吗?

标签: c# asp.net-mvc-3 entity-framework


【解决方案1】:

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

在您的操作链接中执行以下操作:

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

或者尝试更改详细信息签名以获得可接受的 id 可空值,如下所示:

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

【讨论】:

  • 我明白了,但是它传递了主键而不是该模型列表中的另一个值。对于我希望它传递的方法 Details 说 QuizNo 这是列表项之一,而不是传递 PK。我在详细信息中使用它来查询和显示某个视图。
  • 出了什么问题?传递 QuizNo 而不是 id,或者尝试添加新的参数 quizNo 并在其中传递数字,是你要的吗?
  • 是的,这就是我试图将测验不传递给详细信息的原因。不是传递PK,而是传递它的价值之一。
  • 你应该使id参数为空类型,它消除了任何限制。
  • 我明白了。假设通过 @Html.ActionLink("Edit", "Edit", new { id=item.QuizNo }) 而不是 @Html.ActionLink("Edit", "Edit", new { id=item.CertificateNo } )。也接受了你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 2011-08-21
相关资源
最近更新 更多