0

私は .NET 4.0 で MVC3 を使用しています。作成フォームが呼び出されると、オブジェクトが破棄されたことを示す ObjectDisposedException が発生します。この MVC3 ページ ステートメントで例外が発生します。

@Html.DropDownListFor(model => model.Country, GeneralActivity.GetCountriesMVC("NL"))

そして、呼び出されたメソッドは次のようになります。

IEnumerable<SelectListItem> GetCountriesMVC(string preselectCountryCode)
{
   ... some error checking code omited for simplicity ...
   IEnumerable<SelectListItem> qlist;
   using (Data.MyDataContext ctx = new Data.MyDataContext()) {
      qlist = from p in ctx.Countries select new SelectListItem {
          Text = p.CountryName,
          Value = p.CountryCodeId,
          Selected = (p.CountryCodeId == preselectCountryCode)
      };
   }
   return qlist;
}

デバッグ中に、return ステートメントまで実行した後、MVC ページで @Html ステートメントを呼び出すと、例外がスローされます。

qlist インスタンスは USING ステートメントの外で宣言され、LINQ クエリによって初期化されるため、オブジェクトが破棄されたと表示される理由がわかりません。

4

1 に答える 1

1

実際にはクエリを実行していないため、qList にアクセスしようとすると、データベースに接続しようとして接続が閉じられます。

メモリに保存されるように、クエリをリストにキャストしてみてください。

 qlist = (from p in ctx.Countries select new SelectListItem {
      Text = p.CountryName,
      Value = p.CountryCodeId,
      Selected = (p.CountryCodeId == preselectCountryCode)
  }).ToList();
于 2012-10-03T15:15:06.800 に答える