當前我正在檢查選定的項目ID並在顯示上一個選定項目的編輯頁面的下拉列表中顯示。項目根據其活動狀態顯示。所有活動項目都顯示在下拉列表中,如果用戶的上一個選擇選項當前處於非活動狀態,則它應該仍然默認爲下拉列表中的該項目,因爲它是之前所做的選擇。我的問題是,我無法顯示用戶在編輯頁面上選擇的非活動項目。我會後我的代碼,這是在不同的環節問了一個問題的延續:passing null parameters檢查清單項目Id
我的代碼中的控制器:
private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel viewModel = null)
{
if(viewModel == null)
viewModel = new AppointmentViewModel();
IOrderedQueryable<ItemDescription> items= _itemDescriptionRepository.FindAll().OrderBy(
c => c.Sort == null).ThenBy(
c => c.Sort).ThenBy(c => c.Description);
if(items.Count()==0)
ModelState.AddModelError("", string.Format("No active {0} entered.", Kids.Resources.Entities.ItemDescription.EntityNamePlural));
return
_itemDescriptionRepository.FindAll().OrderBy(c => c.Description).Where(a=>a.IsActive == true || a.ItemDescriptionId == viewModel.ItemDescriptionId).Select(
c => new SearchItems {Text = c.Description, Value = c.ItemDescriptionId.ToString()});
}
我的編輯方法控制器:
[HttpGet]
[AppointmentAuthorization]
public ActionResult Edit(Guid appointmentId)
{
Appointment appointment = _appointmentService.Get(appointmentId);
if (appointment == null) return View("NotFound");
var viewModel = new AppointmentViewModel
{
AppointmentId = appointment.AppointmentId,
};
viewModel.Items= GetItems();
return this.RazorView("Edit", viewModel);
}
它看起來像缺少一些東西,並將viewModel作爲參數傳遞給viewModel.Items = GetItems()並沒有太大的作用。我還有另一個用於編輯的Post方法和一個調用GetItems()方法的Create方法。任何幫助都會很棒。謝謝:d
這就是我在我的ViewModel類:
public IEnumberable<SearchItems> Items {get; set;}
public Guid ItemDescriptionid {get; set;}
創建方法:
[HttpGet]
[AppointmentAuthorization]
public ActionResult Create(Guid caseId)
{
var viewModel = new AppointmentViewModel
{
Items= GetItems()
};
return this.RazorView("Create", viewModel);
}
***** SOLUTION *****
private IEnumerable<SearchItems> GetItems(Appointment appointment)
{
IEnumerable<short?> itemDescriptionIds =
appointment.AppointmentItems.Where(c => c.ItemDescriptionId.HasValue).Select(
c => c.ItemDescriptionId).Distinct();
IOrderedQueryable<ItemDescription> itemDescription =
_itemDescriptionRepository.FindAll().Where(
a => a.IsActive == true || itemDescriptionIds.Contains(a.ItemDescriptionId)).OrderBy(
d => d.Description);
return itemDescription.Select(c=> new SearchItems{Text = c.Description, Value = c.ItemDescriptionId.ToString()});
}
在您的viewModel中初始化了appointmentId。這是一個錯字嗎?你說你的ViewModel中甚至沒有AppointmentId。 – DMulligan 2012-04-26 20:43:18
我的壞...我沒有添加它認爲它不是問題的一部分。我刪除了一些像startDate和其他並沒有處理getItems的東西。但是約會是初始化的。 – Masriyah 2012-04-26 20:48:57
我的觀點是你在你的viewmodel中設置了appointmentId而不是itemdescriptionid。 – DMulligan 2012-04-26 21:08:10