public ActionResult Convert(Turgunda2.Models.ConvertModel cm) { if (!string.IsNullOrEmpty(cm.entityid)) { int index; if (Int32.TryParse(cm.entityid, out index)) { string value = StaticObjects.SpecialGetEntityNameByIndex(index); cm.entityvalue = value; } } return View(cm); }
/// <summary> /// EditForm вычисляет (строит, корректирует) модель записи и направляет ее на View построения фрагмента редактирования. /// Возможно несколько случаев запуска EditForm: 1) начальное построение объекта класса RecordModel, который представляет /// собой формируемую копию имеющейся записи; 2) коррекция модели и построение формы; 3) фиксация результата в БД. /// Носителем состояния объекта являются публичные переменные, передаваемые от построения к построению. Признаком /// первого варианта является булевский признак firsttime, который потом "гасится" до конца итераций. /// </summary> /// <param name="rmodel"></param> /// <returns></returns> //[HttpPost] public PartialViewResult EditForm(Turgunda2.Models.RecordModel rmodel) { string chk = Request.Params["chk"]; // проверка ОДНОЙ введенной связи string ok = Request.Params["ok"]; // фиксация изменений, запоминание в БД string canc = Request.Params["canc"]; // Отмена редактирования //string p_4 = Request["p_4"]; //string p_4_ = Request.QueryString["p_4"]; if (rmodel.firsttime) { // формирование формы редактирования rmodel.firsttime = false; bool replacemode = true; if (rmodel.eid == "create888") { string eid = StaticObjects.AddInvRelation(rmodel.bid, rmodel.iprop, rmodel.etype, User.Identity.Name); rmodel.eid = eid; replacemode = false; } rmodel.LoadFromDb(); rmodel.MakeLocalRecord(); //XElement[] arr = rmodel.GetHeaderFlow().ToArray(); //rmodel.MakeXResult(); if (!replacemode) ViewData["insertnewrelation"] = rmodel.eid; } else if (canc != null) { rmodel.LoadFromDb(); rmodel.MakeLocalRecord(); return PartialView("EditFormFinal", rmodel); } else { // Собирание данных из реквеста XElement format = rmodel.CalculateFormat(); XElement[] hrows = rmodel.GetHeaderFlow().ToArray(); if (chk != null) { // Проверка. Находим первый ряд такой, что: а) это прямое отношение, б) набран текст и есть тип, в) нет ссылки. // Делаем поисковый запрос через SearchModel. Результаты SearchResult[] помещаем в ViewData под именем searchresults, // а в ViewData["searchindex"] поместим индекс var pair = hrows.Select((hr, ind) => new { hr = hr, ind = ind }) .FirstOrDefault(hrind => { var hr = hrind.hr; if (hr.Name != "d") return false; var ind = hrind.ind; if (string.IsNullOrEmpty(rmodel.GetFValue(ind)) || string.IsNullOrEmpty(rmodel.GetTValue(ind))) return false; if (!string.IsNullOrEmpty(rmodel.GetPValue(ind))) return false; return true; }); if (pair != null) { int ind = pair.ind; // Ничего проверять не буду Turgunda2.Models.SearchModel sm = new Models.SearchModel(rmodel.GetFValue(ind), rmodel.GetTValue(ind)); ViewData["searchresults"] = sm.Results; ViewData["searchindex"] = ind; } } else if (ok != null) { // Запоминание // Соберем получившуюся запись XElement record = new XElement(sema2012m.ONames.GetXName(rmodel.etype), new XAttribute(sema2012m.ONames.rdfabout, rmodel.eid), hrows.Select((fd, ind) => new { fd = fd, ind = ind }) .Select(fdind => { XElement fd = fdind.fd; int ind = fdind.ind; XName xprop = sema2012m.ONames.GetXName(fd.Attribute("prop").Value); if (fd.Name == "f") { string value = rmodel.GetFValue(ind); if (true || !string.IsNullOrEmpty(value)) // Эта проверка мешает(ла) уничтожению полей { // Надо определить еще нужен ли язык и какой bool istext = Turgunda2.Models.Common.IsTextField(fd.Attribute("prop").Value); return new XElement(xprop, rmodel.GetFValue(ind), istext ? new XAttribute(sema2012m.ONames.xmllang, rmodel.lang) : null); } } else if (fd.Name == "d") { string pvalue = rmodel.GetPValue(ind); if (!string.IsNullOrEmpty(pvalue)) return new XElement(xprop, new XAttribute(sema2012m.ONames.rdfresource, rmodel.GetPValue(ind))); } return (XElement)null; })); // Пошлем эту запись на изменение StaticObjects.PutItemToDb(record, false, User.Identity.Name); // Если эта запись является записью типа "DocumentPart", то фиксируем две величины: // ссылку inDocument и идентификатор, имеющийся "за" этой ссылкой if (record.Name.LocalName == "DocumentPart" && record.Name.NamespaceName == sema2012m.ONames.FOG) { var resource_el = record.Element(XName.Get("inDocument", sema2012m.ONames.FOG)); if (resource_el != null) { string pvalue = resource_el.Attribute(sema2012m.ONames.rdfresource).Value; Session["inDocumentId"] = pvalue; int ind = 0; for (; ind < Turgunda2.Models.RecordModel.nfields; ind++) if (rmodel.GetPValue(ind) == pvalue) break; if (ind < Turgunda2.Models.RecordModel.nfields) { //var s1 = rmodel.GetFValue(ind); //var s2 = rmodel.GetPValue(ind); //var s3 = rmodel.GetTValue(ind); //var s4 = rmodel.GetVValue(ind); Session["inDocumentName"] = rmodel.GetVValue(ind); } } } return PartialView("EditFormFinal", rmodel); } else if (rmodel.command != null && rmodel.command == "SetVariant") { // Выбор варианта значения для связывания string[] parts = rmodel.exchange.Split('|'); int ind = Int32.Parse(parts[0]); string p_id = parts[1]; string p_name = parts[2]; rmodel.SetPValue(ind, p_id); rmodel.SetVValue(ind, p_name); rmodel.CalculateFormat(); } else if (rmodel.command != null && rmodel.command == "SetVariantNew") { // Связывание с новым значением string[] parts = rmodel.exchange.Split('|'); int ind = Int32.Parse(parts[0]); string p_type = parts[1]; string p_name = parts[2]; string nid = StaticObjects.CreateNewItem(p_name, p_type, User.Identity.Name); rmodel.SetPValue(ind, nid); rmodel.SetVValue(ind, p_name); rmodel.CalculateFormat(); } else { // Остальное } } return PartialView("EditForm", rmodel); }
//[HttpPost] public PartialViewResult SetVariant(Turgunda2.Models.RecordModel rmodel) { //Turgunda2.Models.RecordModel rmodel = new Models.RecordModel(); //return PartialView("EditForm", rmodel); return EditForm(rmodel); }
public ActionResult EntityPlaces(Turgunda2.Models.EntityPlacesModel epm) { if (epm.entityvalue != null) { epm.places = StaticObjects.SpecialEntityPlaces(epm.entityvalue).ToArray(); } return View(epm); }