public ActionResult Edit(Guid id, ReaderDetailModel model)
        {
            bool isLinkAction = Request.Form.AllKeys.Contains("linkAction");
            model.ReaderId = id;

            if (isLinkAction)
            {
                var reader = readerRepo.GetItemById(id);
                var groupId = Request.Form["Selection"];

                if (string.IsNullOrWhiteSpace(groupId))
                {
                    ModelState.AddModelError("Selection", "Es wurde keine Auswahl getroffen");
                }
                else
                {
                    var ids = groupId.Split(',');
                    var successCount = 0;
                    var msg = string.Empty;

                    foreach (var gId in ids)
                    {
                        var otherId = Guid.Parse(gId);
                        var action = Request.Form["linkAction"];
                        var success = false;

                        if (action.Equals("DoLinkReaderGroup"))
                        {
                            success = readerRepo.LinkReaderToReaderGroup(reader, otherId);
                            msg = "Der Benutzer {0} wurde mit {1} Benutzergruppen verknüpft";
                        }
                        else if (action.Equals("UnlinkReaderGroup"))
                        {
                            success = readerRepo.UnlinkReaderFromReaderGroup(reader, otherId);
                            msg = "Der Benutzer {0} wurde aus {1} Benutzergruppen herausgenommen";
                        }
                        else
                        {
                            throw new Exception("Keine Aktion erkannt");
                        }

                        successCount += success ? 1 : 0;
                    }

                    TempData[TempDataInfMsg] = string.Format(msg, reader.FriendlyName, successCount);
                }
            }
            else if (ModelState.IsValid)
            {
                var domain = readerRepo.GetItemById(id);
                var typeId = Guid.Parse(Request.Form["ReaderTypeId"]);
                bool typeLink = false;

                if (typeId.Equals(Guid.Empty))
                {
                    typeLink = readerRepo.UnlinkReaderFromReaderType(domain);
                }
                else
                {
                    typeLink = readerRepo.LinkReaderToReaderType(domain, typeId);
                }

                domain.FriendlyName = model.DisplayName;
                domain.Parameter = model.Parameter;
                domain.SerialNr = model.SerialNr;

                var result = readerRepo.Edit(id, domain);
                result = result && typeLink;
                if (!result)
                {
                    TempData[TempDateErrMsg] = string.Format("Die Änderungen am Leser {0} konnten nicht übernommen werden. Bitte kontaktieren Sie den Administrator.", domain.FriendlyName);
                }
                else
                {
                    TempData[TempDataInfMsg] = string.Format("Die Änderungen am Leser {0} wurde erfolgreich übernommen", domain.FriendlyName);
                }

                return RedirectToAction("Index");
            }

            EnhanceWebModel(model, true);
            return View(model);
        }
        private void EnhanceWebModel(ReaderDetailModel model, bool withPossible)
        {
            model.ReaderTypeDisplayName = readerRepo.GetReaderTypeFriendlyNameOfReader(model.ReaderId);
            model.CurrentGroups = readerRepo.GetReaderGroupsOfReader(model.ReaderId);

            if (withPossible)
            {
                model.PossibleReaderTypes = readerRepo.GetPossibleReaderTytpesOfReader(model.ReaderId);
                model.PossibleGroups = readerRepo.GetPossibleReaderGroupsOfReader(model.ReaderId);
            }
        }