そのため、ユーザーが 2 つの異なるカテゴリ (ケースとパーティー) のアイテムを選択できるこのページがあります。ユーザーが訪問 (スケジュール) を作成するとき、ケース カテゴリからアイテムを選択し、特定の関係者を選択できます。次に、選択内容に基づいて情報を保存します。この作成されたスケジュールの編集ページに移動すると、作成ページで選択および保存されたアイテムのチェックボックスをマークしたいと思います。渡されたパラメーターを見逃しているのか、選択したアイテムを表示するために何が必要なのかわかりません。
my Create Get & Post Code (選択を含む情報の保存)
[HttpGet]
public ActionResult Create(Guid caseId)
{
var viewModel = new VisitViewModel();
SetCaseFields(caseId, viewModel);
viewModel.Time = _defaultVisitTime;
AddLookupsToViewModel(viewModel);
return View(viewModel);
}
[HttpPost]
public ActionResult Create(VisitViewModel viewModel, Guid[] associatedCasesSelected, Guid[] selectedParties)
{
if (!ModelState.IsValid)
{
viewModel.Time = _timeEntryHelper.Value;
AddLookupsToViewModel(viewModel);
return View(viewModel);
}
VisitEntry dto = Mapper.Map<VisitViewModel, VisitEntry>(viewModel);
dto.VisitDate = _timeEntryHelper.AddTimeToDate(dto.VisitDate);
dto.CasePartyIds = selectedParties;
dto.Cases = associatedCasesSelected;
SetCurrentUserAndOffice(dto);
try
{
_visitEntryService.Create(dto, dto.Cases);
this.FlashInfo(string.Format(Message.ConfirmationMessageCreate, Resources.Entities.Visit.EntityName));
}
catch (RulesException ex)
{
ex.CopyTo(ModelState);
}
if (ModelState.IsValid)
return RedirectToAction("Edit", "Case", new { caseId = viewModel.CaseId });
return View(viewModel);
}
これが私の Edit Get & Post メソッドです。
[HttpGet]
public ActionResult Edit(Guid visitEntryId)
{
VisitEntry dto = _visitEntryService.Get(visitEntryId);
if (dto == null) return View("Error");
VisitViewModel viewModel = Mapper.Map<VisitEntry, VisitViewModel>(dto);
SetCaseFields(dto.CaseId, viewModel);
AddLookupsToViewModel(viewModel);
return View(viewModel);}
[HttpPost]
public ActionResult Edit(VisitViewModel viewModel, Guid[] associatedCasesSelected, Guid[] selectedParties)
{
if(!ModelState.IsValid)
{
viewModel.Time = _timeEntryHelper.Value;
AddLookupsToViewModel(viewModel);
return View(viewModel);
}
try
{
VisitEntry dto = Mapper.Map<VisitViewModel, VisitEntry>(viewModel);
dto.VisitDate = _timeEntryHelper.AddTimeToDate(dto.VisitDate);
dto.CasePartyIds = selectedParties;
dto.Cases = associatedCasesSelected;
SetCurrentUserAndOffice(dto);
_visitEntryService.Update(dto, dto.Cases);
}
catch (RulesException ex)
{
ex.CopyTo(ModelState);
}
if (!ModelState.IsValid)
{
viewModel.Time = _timeEntryHelper.Value;
AddLookupsToViewModel(viewModel);
return View(viewModel);
}
this.FlashInfo(string.Format(Message.ConfirmationMessageUpdate, Kids.Resources.Entities.Visit.EntityName));
return RedirectToAction("Edit", "Case", new {caseId = viewModel.CaseId});
}
このメソッドはパーティ情報をロードします:
IList<Party> caseParties =
_associatedCasePartyService.GetAssignedPartiesForThisAndAssociatedCases(viewModel.CaseId,
_currentUser.OfficeId);
if (caseParties != null)
viewModel.AvailableCaseParties = caseParties;
これは私のビューモデルです:
public class VisitViewModel
{
public IEnumerable<Party> AvailableCaseParties { get; set; }
public IList<Guid> PartiesSelected { get; set; }
}
フィールド配置を含む VisitForm.ascx:
<%Html.RenderPartial("Parties", Model); %>
Parties.ascx - ボックスをチェックできるようにする行が含まれています。チェックボックスをオンにしてエントリを編集すると、チェックされた関係者を除くすべての保存された情報がページに読み込まれます。
<% if (Model.AvailableCaseParties != null && Model.AvailableCaseParties.Count() > 0)
{%>
<div class="row">
<fieldset>
<legend>Parties</legend>
<div>
<%=Html.Grid(Model.AvailableCaseParties).Attributes(id => "PartiesGrid").Columns(
column =>
{
column.For(party =>
string.Format("<input type='checkbox' {1} name='selectedParties' value='{0}'/>",
party.PartyId, Model.PartiesSelected != null && Model.PartiesSelected.Count(p => p == party.PartyId) > 0 ? "checked" : string.Empty)).Encode(false).Header(string.Format("<TH><input type='checkbox' name='checkSelect'/></TH>"));
column.For(party => party.FullName).Named(Kids.Resources.Entities.Party.EntityName);
}
).Empty(string.Format("No {0}", Kids.Resources.Entities.Party.EntityNamePlural))
%>
</div>
</fieldset>
</div>