在下面的HttpPost操作方法中,参数是否有可能为null?

时间:2013-06-18 13:27:05

标签: c# asp.net-mvc

//
// GET: /Movies/Edit/5

public ActionResult Edit(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

//
// POST: /Movies/Edit/5

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

根据我的理解,只有通过在相应视图中发布填充的表单才能访问HttpPost。我的困惑在于我是否需要检查HttpPost中movie的无效性,因为我认为movie没有机会成为null。你怎么看呢? movie null是否有{{1}}?

请明智地通过给出理由来推翻我的问题!

2 个答案:

答案 0 :(得分:1)

是电影可能为空,所以你应该检查一下。以下面的AJAX调用为例:

$.ajax({

    type: "POST",
    url: "Home/Edit",
    async: false,
    data: {},
    success: function (data, text) {
        // do something
    },
    error: function (request, status, error) {
        //do something
    }
});

在这种情况下,Movie将为null,您应该通过检查null来解释代码:

public ActionResult Edit(Movie movie)
{
   if (movie == null)
   {
        // Return a different view or perform a redirect
   }

   //... The rest of your code
}

答案 1 :(得分:0)

ModelState.IsValid仅告诉您是否已将任何模型错误添加到ModelState,而不是模型包含NULL引用。

public ActionResult Edit(Movie movie)
{
    if(movie == null)
    {
        // or what else you what...
        return View();
    }

    if (ModelState.IsValid)
    {
        db.Entry(movie).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(movie);
}