Exibindo itens marcados / selecionados como marcados na página de edição
Então eu tenho essa página onde o usuário pode selecionar itens para duas categorias diferentes (Casos e Partes). Quando um usuário cria uma visita (agendamento), ele pode selecionar itens ou itens da categoria Casos e selecionar determinadas partes. Em seguida, eles salvam as informações com base nas seleções. Quando eu vou para a página de edição desta agenda criada, eu gostaria de ter as caixas de seleção marcadas para os itens que foram selecionados e salvos durante a página de criação. Não tenho certeza se estou perdendo os parâmetros passados ou o que eu preciso mostrar itens selecionados.
my Create Get & Post Code (salvando informações contendo seleções)
[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);
}
Este é o meu método Editar 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});
}
Este método carrega informações da festa:
IList<Party> caseParties =
_associatedCasePartyService.GetAssignedPartiesForThisAndAssociatedCases(viewModel.CaseId,
_currentUser.OfficeId);
if (caseParties != null)
viewModel.AvailableCaseParties = caseParties;
Este é o meu viewModel:
public class VisitViewModel
{
public IEnumerable<Party> AvailableCaseParties { get; set; }
public IList<Guid> PartiesSelected { get; set; }
}
VisitForm.ascx contendo canais de campos:
<%Html.RenderPartial("Parties", Model); %>
Parties.ascx - que contém a linha para permitir a verificação da caixa e, quando feito, editar a entrada que a página carrega com todas as informações salvas, exceto as marcadas:
<% 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>