4

私はmvcC#を初めて使用し、行き詰まっています。これを修正する方法についてアドバイスしてください。追加でエラーが発生します。赤い波線にカーソルを合わせると、「すべてのコードパスが値を返すわけではありません」と表示されます。

    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 nullreturn 'any other thing'、問題を解決します!

于 2012-05-24T04:36:49.323 に答える
3

return「if」が入力されていない場合はありません。

私は常にif-elseの[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

(TryUpdateModel(model))を返す場合、何も返されませんfalse。多分あなたはあなたのreturn View();外にいるつもりでしたifか?

于 2012-05-24T04:22:25.320 に答える
0

エラーは、缶に書かれていることを実行します。関数は完了するが値を返さないコードパスがあります。戻り型を持つ関数は、常に値を返すか、例外をスローする必要があります。

あなたの場合、TryUpdateModel(model)returnsの場合、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では、真でない場合は何が返されますか?

ステートメントがfalseの場合でも、メソッドはActionResult偶数を返す必要があります。if

于 2012-05-24T04:23:02.263 に答える
0

コードをざっと見てみると、returnコマンド(return View()が「if」ステートメントブロック内にあることがわかります。「If」条件が失敗した場合、そのスコープ外にreturnステートメントはありません。最も簡単な方法は

 }

            return View();

        }
return null; // Depends upon your code though. you might want to return something else
}
于 2012-05-24T04:24:52.140 に答える
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 に答える