是否有机会在下面的HttpPost操作方法中参数为空

本文关键字:参数 操作方法 HttpPost 机会 在下面 是否 | 更新日期: 2023-09-27 18:19:03

//
// 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吗?

请明智地否决我的问题,并给出原因!

是否有机会在下面的HttpPost操作方法中参数为空

是的,movie可能为空,所以您应该检查它。以以下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
}

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