在ASP.NET应用程序中检测到无法访问的代码

时间:2011-11-26 09:12:54

标签: asp.net-mvc-3 c#-4.0

我在Visual Studio 2010中为我的ASP.NET应用程序中的搜索方法收到了“检测到无法访问的代码”消息。 这是方法:

 public ActionResult SearchIndex(string artist, string albumGenre, string searchString)
    {
        var GenreList = new List<string>();

        var GenreQuery = from d in storeDB.Albums orderby d.Genre.Name select          d.Genre.Name;
        GenreList.AddRange(GenreQuery.Distinct());
        ViewBag.albumGenre = new SelectList(GenreList);

        var ArtistList = new List<string>();

        var ArtistQuery = from a in storeDB.Artists orderby a.Name select a.Name;
        ArtistList.AddRange(ArtistQuery.Distinct());
        ViewBag.artist = new SelectList(ArtistList);

        var albums = from m in storeDB.Albums select m;

        if (string.IsNullOrEmpty(artist))
        {
            return View(albums);
        }
        else
        {
            return View(albums.Where(f => f.Artist.Name == artist));
        }

        if (!String.IsNullOrEmpty(searchString))
        {
            return View(albums.Where(s => s.Title.Contains(searchString)));
        }

        if (string.IsNullOrEmpty(albumGenre))
        {
            return View(albums);
        }
        else
        {
            return View(albums.Where(x => x.Genre.Name == albumGenre));
        }
  }

对于这个声明我收到了消息:

       if (!String.IsNullOrEmpty(searchString))
        {
            return View(albums.Where(s => s.Title.Contains(searchString)));
        }

我哪里出错了?

3 个答案:

答案 0 :(得分:2)

因为在之前的if-else区块中,您肯定会从ifelse区块返回并放弃您的方法。

所以在任何情况下都不会执行以下代码。

答案 1 :(得分:1)

之前的if在其两个分支中都有return语句,因此您的函数将在到达第二个if之前始终返回。

答案 2 :(得分:0)

这是更正后的代码

public ActionResult SearchIndex(string artist, string albumGenre, string searchString)
  {
      var GenreList = new List<string>();

      var GenreQuery = from d in storeDB.Albums orderby d.Genre.Name select          d.Genre.Name;
      GenreList.AddRange(GenreQuery.Distinct());
      ViewBag.albumGenre = new SelectList(GenreList);

      var ArtistList = new List<string>();

      var ArtistQuery = from a in storeDB.Artists orderby a.Name select a.Name;
      ArtistList.AddRange(ArtistQuery.Distinct());
      ViewBag.artist = new SelectList(ArtistList);

      var albums = from m in storeDB.Albums select m;

      if (!string.IsNullOrEmpty(artist))
      {
          return View(albums.Where(f => f.Artist.Name == artist));
      }
      else if (!String.IsNullOrEmpty(searchString))
      {
          return View(albums.Where(s => s.Title.Contains(searchString)));
      }
      else if (!string.IsNullOrEmpty(albumGenre))
      {
          return View(albums.Where(x => x.Genre.Name == albumGenre));
      }
      else
      {
          return View(albums);
      }

}