0

我使用這部分代碼從我的數據庫中獲取信息,使用實體框架,並將其全部添加到IEnumerable屬性中,最後顯示DropDownListFor。 我需要多次使用這種代碼,所以我想使它成爲最強大的功能。如何簡化我的請求代碼?

public IEnumerable<SelectListItem> Functions { get 
    { 
     List<SelectListItem> result = new List<SelectListItem>(); 
     using (followupconsultantEntities dataModel = new followupconsultantEntities()) 
     { 
      var myEvents = from e in dataModel.functions 
          select e; 
      foreach (var function in myEvents) 
      { 
       SelectListItem myList = new SelectListItem 
              { 
               Value = function.ID_Function.ToString(CultureInfo.InvariantCulture), 
               Text = function.FU_Name 
              }; 
       result.Add(myList); 
      } 
     } 
     return result; 
    } } 

感謝您的幫助

的觀點:

<div class="editor-field"> 
<%: Html.DropDownListFor(m => m.SelectedFunction,Model.Functions) %> 
</div> 

的信息,我的控制器:

public ActionResult Register() 
    { 
     ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 
     return View(new RegisterModel()); 
    } 

回答

1

開始使用System.Web.Mvc.SelectList

public IEnumerable<SelectListItem> Functions { get 
{ 
    using (followupconsultantEntities dataModel = new followupconsultantEntities()) 
    { 
     return new SelectList(dataModel.functions.ToArray(), "ID_Function", "FU_Name"); 
    } 
} 

還要考慮AutoMapper

+0

感謝您的幫助,像我的代碼工作,所以這是我想要的東西,但是,有關與視圖System.ObjectDisposedException發生一個錯誤。我編輯帖子以顯示視圖和控制器。 我可以做什麼樣的改變? –

+0

@ArnaudBessems你將不得不在''using'塊中檢索你的'函數'數據。在寫入數據之前,您不會實際嘗試獲取數據,直到它在視圖中呈現,並且那段時間您的上下文已經被處置。 – James

+1

在關閉上下文之前,您需要遍歷IQueriable。所以你需要使用dataModel.functions.ToArray() –

1

試試這個。在這段代碼中,你不會從你不需要的數據庫數據中獲得。

public IEnumerable<SelectListItem> Functions { get 
{ 
    using (followupconsultantEntities dataModel = new followupconsultantEntities()) 
    { 
     return new SelectList(dataModel.functions.Select(f=> 
       new 
       { 
        Value = function.ID_Function.ToString(CultureInfo.InvariantCulture), 
        Text = function.FU_Name 
       }) 
       .ToArray(), "Value", "Text"); 
    } 

}

+0

此代碼不起作用,因爲您試圖將ID_Function和FU_Name字符串映射到Value和Text屬性。 –

+0

謝謝。 copypast :( –