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

C# 在下面的HttpPost操作方法中,参数是否有可能为null?,c#,asp.net-mvc,C#,Asp.net Mvc,据我所知,HttpPost只能通过在相应的视图中发布填充的表单来访问。我的困惑是,我是否需要在HttpPost中检查movie的空值,因为我认为movie不可能是null。你觉得怎么样?是否有可能电影为空 请明智地否决我的问题,给出理由 ModelState.IsValid仅告诉您是否已将任何模型错误添加到ModelState,而不是模型是否包含空引用 // // GET: /Movies/Edit/5 public ActionResult Edit(int id = 0) { Mo

据我所知,HttpPost只能通过在相应的视图中发布填充的表单来访问。我的困惑是,我是否需要在HttpPost中检查
movie
的空值,因为我认为
movie
不可能是
null
。你觉得怎么样?是否有可能
电影


请明智地否决我的问题,给出理由

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

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

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

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);
}
在这种情况下,Movie将为null,您应该通过检查null在代码中说明这一点:

$.ajax({

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

您没有将任何空签入yet@Sayse:它没有回答我的问题。您最初的问题是,为什么在没有Ajax调用的正常场景中,该方法不检查null(或类似的内容)(我还没有确切地了解Ajax),是否仍有必要检查
电影
的空值?如果为空,其余代码将如何运行?它会崩溃吗?它会关闭整个应用程序吗?在web应用程序中,仅仅因为您的UI没有公开,并不意味着有人不能使用fiddler、浏览器开发工具或直接ajax调用来调用您的方法。如果这些方法损坏了数据或使整个系统崩溃,如果它们是恶意的,可能会有人给您带来许多问题。@artificialstuptity and
public ActionResult Edit(Movie movie)
{
   if (movie == null)
   {
        // Return a different view or perform a redirect
   }

   //... The rest of your code
}