internal INakedObject FilterCollection(INakedObject nakedObject, ObjectAndControlData controlData) { var form = controlData.Form; if (form != null && nakedObject != null && nakedObject.Specification.IsCollection && nakedObject.Oid is CollectionMemento) { nakedObject = Page(nakedObject, nakedObject.GetAsQueryable().Count(), controlData, false); var map = nakedObject.GetAsEnumerable().ToDictionary(FrameworkHelper.GetObjectId, y => y.Object); var selected = map.Where(kvp => form.Keys.Cast<string>().Contains(kvp.Key) && form[kvp.Key].Contains("true")).Select(kvp => kvp.Value).ToArray(); return CloneAndPopulateCollection(nakedObject, selected, false); } return nakedObject; }
internal ActionResult AppropriateView(ObjectAndControlData controlData, INakedObject nakedObject, INakedObjectAction action = null, string propertyName = null) { if (nakedObject == null) { // no object to go to // if action on object go to that object. // if action on collection go to collection // if action on service go to last object nakedObject = controlData.GetNakedObject(); if (nakedObject.Specification.IsService) { object lastObject = Session.LastObject(ObjectCache.ObjectFlag.BreadCrumb); if (lastObject == null) { TempData[IdHelper.NofMessages] = NakedObjectsContext.MessageBroker.Messages; TempData[IdHelper.NofWarnings] = NakedObjectsContext.MessageBroker.Warnings; return RedirectToAction(IdHelper.IndexAction, IdHelper.HomeName); } nakedObject = FrameworkHelper.GetNakedObject(lastObject); } } if (nakedObject.Specification.IsCollection && !nakedObject.Specification.IsParseable) { var collection = nakedObject.GetAsQueryable(); int collectionSize = collection.Count(); if (collectionSize == 1) { // remove any paging data - to catch case where custom page has embedded standalone collection as paging data will confuse rendering ViewData.Remove(IdHelper.PagingData); return View("ObjectView", collection.First()); } nakedObject = Page(nakedObject, collectionSize, controlData, nakedObject.IsNotQueryable()); action = action ?? ((CollectionMemento)nakedObject.Oid).Action; int page, pageSize; CurrentlyPaging(controlData, collectionSize, out page, out pageSize); var format = ViewData["NofCollectionFormat"] as string; return View("StandaloneTable", ActionResultModel.Create(action, nakedObject, page, pageSize, format)); } // remove any paging data - to catch case where custom page has embedded standalone collection as paging data will confuse rendering ViewData.Remove(IdHelper.PagingData); if (controlData.DataDict.Values.Contains("max")) { // maximizing an inline object - do not update history ViewData.Add("updateHistory", false); } return propertyName == null ? View(nakedObject.IsNotPersistent() ? "ObjectView" : "ViewNameSetAfterTransaction", nakedObject.Object) : View(nakedObject.IsNotPersistent() ? "PropertyView" : "ViewNameSetAfterTransaction", new PropertyViewModel(nakedObject.Object, propertyName)); }