MVC 3框架编辑和详细信息问题

时间:2012-03-31 11:40:34

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

背景和问题

我已成功生成数据库,数据库中的模型以及生成默认页面的控制器。我目前遇到的问题是编辑和删除页面,它们不断产生问题并尝试过

  1. 删除上下文并阅读
  2. 删除模型和所有内容并重新添加
  3. 单击详细信息页面中的编辑/删除页面时生成的问题语句:

    应用程序中的服务器错误。

    参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于'Olympics2012.Controllers.AthleteController'中的方法'System.Web.Mvc.ActionResult Edit(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数

    描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

    异常详细信息:System.ArgumentException:参数字典在'Olympics2012'中包含方法'System.Web.Mvc.ActionResult Edit(Int32)'的非可空类型'System.Int32'的参数'id'的空条目.Controllers.AthleteController”。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数

    控制器编辑代码

        public ActionResult Edit(int? id)
        {
    
            Athlete athlete = db.Athletes.Find(id);
            return View(athlete);
        }
    
        [HttpPost]
        public ActionResult Edit(Athlete athlete)
        {
            if (ModelState.IsValid)
            {
                db.Entry(athlete).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(athlete);
        }
    

2 个答案:

答案 0 :(得分:1)

嗨,尝试将一个int值传递给Find方法:

public ActionResult Edit(int? id)
{
    if (id.HasValue) 
    {
        Athlete athlete = db.Athletes.Find(id.Value);
        return View(athlete);
    }

    // A null-value has been passed
    return RedirectToAction("Index");
}

第二:您的编辑链接是否包含要编辑的项目的ID?

例如:http:// [site_name] / [controller_name] / Edit / [id]

如果你没有指定id,那么你应该这样做(在'SomeView.schtml'文件中,如果你使用Razor引擎):

//...
@foreach(var item in [elements_container].Elements)
{
    //...
    @Html.ActionLink("Edit", "Edit", new { id = item.Id })
    //...
}
//...

答案 1 :(得分:0)

尝试将编辑方法更改为:

public ActionResult Edit(int id)