Кнопка добавления Jqgrid использует код из edit в контроллере
Я почесываю в затылке Вот этим. Мой код выглядит правильным, но когда я выбираю в представлении, чтобы добавить строку, он фактически вызывает редактирование в контроллере. Я знаю это, потому что получаю ошибку при сохранении. Я изменил сообщение об ошибке в своем контроллере, чтобы убедиться, что сообщение пришло из кода редактирования. Есть ли что-то, чего я здесь не вижу? спасибо за вашу помощь.
Что я уже пробовал:
Jqgrid
{ // add option zIndex: 100, url: "/Admin/CreateCustomer", closeOnEscape: true, closeAfterAdd: true, afterComplete: function (response) { if (response.responseJSON) { if (response.responseJSON === "Saved Successfully") { alert("Saved Successfully"); } else { var message = ""; for (var i = 0; i < response.responseJSON.length; i++) { message += response.responseJSON[i]; message += "\n"; } } } } }, { // edit option zIndex: 100, url: '/Admin/EditCustomer', closeOnEscape: true, closeAfterEdit: true, recreateForm: true, afterComplete: function (response) { if (response.responseText) { alert(response.responseText); } } },
Контроллер
[HttpPost] public JsonResult CreateCustomer([Bind(Exclude = "ID")] Customer customer) { StringBuilder msg = new StringBuilder(); try { if (ModelState.IsValid) { using (StoreEntities db = new StoreEntities()) { db.CustomerSet.Add(customer); db.SaveChanges(); return Json("Saved Successfully", JsonRequestBehavior.AllowGet); } } else { var errorList = (from item in ModelState where item.Value.Errors.Any() select item.Value.Errors[0].ErrorMessage).ToList(); return Json(errorList, JsonRequestBehavior.AllowGet); } } //catch (Exception ex) //{ // var errormessage = "Error occured: " + ex.Message; // return Json(errormessage, JsonRequestBehavior.AllowGet); //} catch (System.Data.Entity.Validation.DbEntityValidationException dbEx) { var errorList = new List<string>(); foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { errorList.Add(String.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage)); } } return Json(errorList); } } public string EditCustomer(Customer customer) { string msg; try { if (ModelState.IsValid) { using (StoreEntities db = new StoreEntities()) { db.Entry(customer).State = EntityState.Modified; db.SaveChanges(); msg = "Saved Successfully"; } } else { msg = "Did not save! Error from Edit Customer "; } } catch (Exception ex) { msg = "Error occured:" + ex.Message; } return msg; } #endregion
Mike V Baker
"...когда я выбираю в представлении, чтобы добавить строку, она фактически вызывает редактирование в контроллере.."
Возможно ли, что он думает, что вы отредактировали строку, которая теряет фокус? Нажмите кнопку Просмотр, чтобы добавить новую запись. Для этого он должен оставить запись, которая была выбрана при запуске...? Какова ценность клиента в этот момент? Возможно, это null, и все, что вам нужно, - это проверка на выход нулевой сущности.
Member 13812021
Сейчас за столом никого нет. Строка не выбрана. Я помещу запись в таблицу вручную, как и раньше, чтобы убедиться, что она отображается в сетке. Я удалил их с помощью кнопки delete, так что оба они работают. У меня также есть таблица пользователей, которая, кажется, работает, но в ней уже есть записи. Я опубликую свои выводы. Однако если это так, то почему он требует, чтобы в таблице были данные, прежде чем он будет работать?
Ладно, добавил запись вручную. Не совсем понимаю, что происходит. Он все еще использует редактирование, и когда я иду редактировать запись, он сохраняет ее в таблице как новую запись. Чтобы изменить это, используя "добавить" и добавить через редактирование????
Mike V Baker
Код, который вызовет сохранение, не опубликован, поэтому я не уверен, но то, что я думал, может произойти, это то, что сохранение инициируется каким - то событием в сетке. Похоже, что событие запускается для вас, когда в данный момент нет выбранной записи. Таким образом, контроллер вызывается с клиентом == null. Можете ли вы прервать операцию и просмотреть стек вызовов, чтобы увидеть, откуда вызывается обновление?
Member 13812021
Сохранение - это "создать клиента" в разделе контроллера выше. Мне придется взглянуть на него позже. Тот же самый код используется в другой таблице, и он работает, вот что меня смущает. Я подумал, что, возможно, что-то пропустил в копии.