获取错误:并非所有代码路径都返回值

时间:2012-05-24 04:20:04

标签: c#

我是mvc C#的新手并且被卡住了。请告知如何解决这个问题。我在Add上收到错误。当我将鼠标悬停在红色波浪形线上时,它表示"并非所有代码路径都返回一个值"

    public ActionResult Add(ShapeInputModel dto, FormCollection collection)
    {

        var model = new GeoRegions();

        if (TryUpdateModel(model))
        {


            var destinationFolder = Server.MapPath("/App_Data/KML");
            var postedFile = dto.Shape;

            if (postedFile != null)
            {
                var fileName = Path.GetFileName(postedFile.FileName);
                var path = Path.Combine(destinationFolder, fileName);
                postedFile.SaveAs(path);

                //Save to Database
                Db.AddGeoRegions(model);
                return RedirectToAction("Index");

            }

            return View();

        }
    }

10 个答案:

答案 0 :(得分:8)

使用此:

public ActionResult Add(ShapeInputModel dto, FormCollection collection)
{
    var model = new GeoRegions();

    if (TryUpdateModel(model))
    {
        var destinationFolder = Server.MapPath("/App_Data/KML");
        var postedFile = dto.Shape;

        if (postedFile != null)
        {
            var fileName = Path.GetFileName(postedFile.FileName);
            var path = Path.Combine(destinationFolder, fileName);
            postedFile.SaveAs(path);

            //Save to Database
            Db.AddGeoRegions(model);
            return RedirectToAction("Index");
        }
        return View();

    }
    return null; // you can change the null to anything else also.
}

发生错误是因为如果TryUpdateModel(model) = false您的函数没有返回任何内容。因此,添加行return nullreturn 'any other thing'可以解决问题!

答案 1 :(得分:3)

如果从未输入“if”,则没有return

我喜欢始终保持if-else的[与return]平衡使用,我可以一目了然地看到返回值(以及所有路径都有返回值):

if (TryUpdateModel(model))
{
    ...
    if (postedFile != null)
    {
        ...
        return RedirectToAction("Index");
    } else {
        return View();
    }
} else {
    return View(); // or null/whatever is appropriate
}

当然,ReSharper经常告诉我,我有“无用的”其他陈述; - )

快乐的编码。

答案 2 :(得分:1)

添加

 return null;

在最后一行}

之前

答案 3 :(得分:0)

如果(TryUpdateModel(model))返回false,则不会返回任何内容。也许你打算让return View();超出if

答案 4 :(得分:0)

这个错误就像它在锡上说的那样;这是一个代码路径,函数将完成,但不会返回值。具有返回类型的函数必须始终返回值或抛出异常。

在您的情况下,如果TryUpdateModel(model)返回false,则您没有返回值。

答案 5 :(得分:0)

好好阅读错误!在方法执行的某个时刻,您必须返回一个值,或抛出异常。 (我认为在这种情况下返回null是有序的)

答案 6 :(得分:0)

当然,您的初始if (TryUpdateModel(model))会使您的例程仅在条件为true时返回值;如果不是,则不会返回任何违反方法签名的内容。

答案 7 :(得分:0)

你有

if (TryUpdateModel(model))
{
    // lots of stuff

    return View();
}

那么如果TryUpdateModel不正确,会返回什么?

即使ActionResult语句为false,您的方法也必须返回if

答案 8 :(得分:0)

快速查看代码我可以看到你有返回命令(在“if”语句块中返回View()。现在如果“If”条件失败,那么它之外没有return语句范围。最简单的方法是

 }

            return View();

        }
return null; // Depends upon your code though. you might want to return something else
}

答案 9 :(得分:0)

您在“if()”条件中返回值。如果条件失败,会发生什么?该计划将不会返回价值。因此,如果条件,则返回任何默认值,它可能处于其他条件。

public ActionResult Add(ShapeInputModel dto, FormCollection collection)
{

    var model = new GeoRegions();

    if (TryUpdateModel(model))
    {
     ....
     ....
    }
    return default_value;//it may be in else condition also.
}

试试吧。如果您的问题得到解决,请标记为已回答。这对其他人有用。