現在、選択したアイテム ID を確認し、以前に選択したアイテムを表示する編集ページのドロップダウン リストに表示しようとしています。アイテムは、アクティブなステータスに基づいて表示されます。すべてのアクティブな項目がドロップダウンに表示され、ユーザーの以前の選択項目が現在非アクティブである場合でも、以前に選択されていたため、ドロップダウン リストのその項目にデフォルト設定する必要があります。私の問題は、編集ページでユーザーが選択した非アクティブなアイテムを表示できないことです。すべてのコードを投稿します。これは、別のリンクで尋ねられた質問の続きです: null パラメータを渡す
コントローラーの私のコード:
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.Items= GetItems() のパラメーターとして viewModel を渡してもあまり効果がありませんでした。Edit 用の別の Post メソッドと、GetItems() メソッドを呼び出す Create メソッドもあります。どんな助けでも素晴らしいでしょう。ありがとう
これは、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);
}
*****解決*****
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()});
}