Я работаю над приложением CRUD в ASP. net C #.
Моя проблема заключается в том, что когда я нажимаю кнопку «Отправить» и ModelState.IsValid = false, данные в сетке теряются. Кто-нибудь знает, как это исправить?
У меня есть форма в html и бритва, я не мог оставить всю работу на запрос ajax, так что я сделал, добавив onsubmit событие для формы с функцией «sendContacts», эта функция получает информацию о сетке в виде строки JSON, а затем я назначаю ее в скрытом поле формы, чтобы мой контроллер мог получить всю информацию.
Html
@using (Html.BeginForm("Nuevo", "Clientes", FormMethod.Post, new { id = "Form", onsubmit = "sendingContactos();", enctype = "multipart/form-data" }))
{
@Html.Hidden("lista_contactos");
.... A lot of razor inputs and selects
<div class="form-group row">
@Html.LabelFor(p => p.nombre_comercial)
@Html.TextBoxFor(p => p.nombre_comercial, new { @class = "form-control" })
@Html.ValidationMessage("nombre_comercial", new { @class = "text-danger" })
</div>
... And then jqgrid
<div class="jqGrid_wrapper p-xs" style="overflow: hidden;">
<table id="grid"></table>
<div id="cc-footer"></div>
<div id="cc-toolbar"></div>
</div> }
Javascript
var lastsel;
jQuery("#grid").jqGrid({
caption: " ",
datatype: "local",
autowidth: true,
viewrecords: true,
rownumbers: true,
rowNum: 10,
rowList: [10, 20, 30],
pager: '#cc-footer',
colNames: [
'Nombre',
'Apellido Paterno',
'Apellido Materno',
'Departamento',
],
colModel: [
{ name: 'nombre', editable: true, },
{ name: 'appaterno', editable: true, },
{ name: 'apmaterno', editable: true, },
{
name: 'departamento',
index: 'departamento',
editable: true,
edittype: 'select',
editoptions: {
size: 1,
dataUrl: cl,
buildSelect: function (data) {
var response = jQuery.parseJSON(data);
var s = '<select>';
s += '<option></option>';
jQuery.each(response, function (i, item) {
s += '<option value="' + response[i].cve_departamentos + '">' + response[i].nombre + '</option>';
});
return s + "</select>";
console.log(data);
}
},
editrules: { required: true, edithidden: true },
recreateForm: true
},
],
editurl: "clientArray",
});
OnSubmit
function sendingContactos() {
var grid = $('#grid').jqGrid('getRowData');
var clientes_contactos = {
"clientes_contactos": grid
};
$("#lista_contactos").val(JSON.stringify(clientes_contactos));
}
Контроллер
[HttpPost]
public async Task<ActionResult> Nuevo(Clientes cliente, HttpPostedFileBase file)
{
List<ClientesContactos> cc = new List<ClientesContactos>();
var myJObject = JObject.Parse(cliente.lista_contactos);
cc = JsonConvert.DeserializeObject<List<ClientesContactos>>(myJObject["clientes_contactos"].ToString());
cliente.clientes_contactos = cc;
if (!ModelState.IsValid)
{
GettingCombos();
return View(cliente);
}
else
{
byte[] foto = null;
if (file != null)
{
BinaryReader lector = new BinaryReader(file.InputStream);
foto = lector.ReadBytes((int)file.ContentLength);
cliente.cve_logo = foto;
}
try
{
await ClientHelper.Post("api/Clientes/Add", cliente);
}
catch (Exception e)
{
ModelState.AddModelError(string.Empty, "Error al insertar registro." + e);
}
return RedirectToAction("Index");
}
}