4

我是 mvc C# 的新手并且被卡住了。请告知如何解决此问题。我在添加时遇到错误。当我将鼠标悬停在红色波浪线上时,它显示“并非所有代码路径都返回值”

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

        }
    }
4

10 回答 10

11

用这个 :

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 null还是return 'any other thing'会解决问题的!

于 2012-05-24T04:36:49.323 回答
3

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

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

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

当然,ReSharper 经常告诉我我有“无用”的 else 语句;-)

快乐编码。

于 2012-05-24T04:21:56.947 回答
2

添加

 return null;

在最后一行之前}

于 2012-05-24T04:25:43.273 回答
0

您在“if()”条件内返回值。如果条件失败怎么办?该程序将不会返回值。因此,返回 if 条件之外的任何默认值,它可能处于 else 条件。

public ActionResult Add(ShapeInputModel dto, FormCollection collection)
{

    var model = new GeoRegions();

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

试试看。如果您的问题得到解决,则标记​​为已回答。以便对其他人有用。

于 2012-05-24T05:07:21.837 回答
0

如果(TryUpdateModel(model))返回,则不会返回任何内容false。也许你的意思是让你return View();在外面if

于 2012-05-24T04:22:25.320 回答
0

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

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

于 2012-05-24T04:22:25.543 回答
0

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

于 2012-05-24T04:22:33.280 回答
0

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

于 2012-05-24T04:22:33.963 回答
0

你有

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

    return View();
}

TryUpdateModel那么如果不是真的会返回什么?

当语句为假时,您的方法必须返回ActionResult偶数。if

于 2012-05-24T04:23:02.263 回答
0

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

 }

            return View();

        }
return null; // Depends upon your code though. you might want to return something else
}
于 2012-05-24T04:24:52.140 回答