Отправка значений массива из представления в контроллер без фреймворка сущностей в MVC
Я разрабатываю основную форму ввода подробных данных без использования entity framwork. У меня есть две таблицы deal making и deal details для этой цели я передаю значения master и detail контроллеру с помощью ajax-вызова. все идет хорошо, и все записи поступают в контроллер, я проверяю его, ставя точку останова. но проблема в том, что он не входит внутрь во время проверки состояния модели. Это дает модель stat false и дает ошибку " представление результатов = расширение представления результатов будет перечислять IEnumerable."
Что я уже пробовал:
//ajax вызов в поле зрения
var dealDetail = { "ItemSysSeq": "", "Qty": "", "UnitPrice": "" };
// создание мастер-объектов сделки
var DealMaster = { "DealSysSeq": "", "DealCode": "", "DealName": "", "ActiveFromDate": "", "ActiveToDate": "", "TotalCost": "", "Discount": "", "Dealoffer": "", "Примечания": "", "DealDetails": [] };
// // Установить Основное Значение Сделок
DealMaster.DealSysSeq = 0;
DealMaster.DealCode = $("#DealCode").val();
DealMaster.DealName = $("#DealName").val();
DealMaster.ActiveFromDate = $("#dateFrom").val
DealMaster.ActiveToDate = $("#dateTo").val();
DealMaster.TotalCost = $("#lblTotal").val();
DealMaster.Скидка = $("#txtdiscount").val();
DealMaster.Dealoffer = $("#txtoffer").val();
DealMaster.Remarks = $("#txtremarks").val();
//создание массива и установка значений детализации сделки
//$('#stockitemError').text(");
var stockvalues = [];
//var erroritemcount = 0;
$('#Dealdetailitems tr').each(функция (tr) {
//если (
// $('select.pc', this).val() == "0" ||
// $('.txtQty', этот).функция val() == "" ||
// isNaN($('.txtQty', this).val()) ||
// $('.txtopeningBalance', этот).функция val() == "" ||
// isNaN($('.txtopeningBalance', this).val())
//)
//{
// erroritemcount++;
// $(this).addClass('error');
//}
//еще {
dealDetail.ItemSysSeq = $('select.pc', this).val(),
dealDetail.Qty = parseFloat($('.txtQty', this).val()),
dealDetail.UnitPrice = parseFloat($('.txtUnitPrice', this).val())
DealMaster.DealDetails.push(dealDetail);
dealDetail = { "ItemSysSeq": "", "Qty": "", "UnitPrice": "" };
//}
});
// Установить Ajax Post
$.Аякс({
url: '/DealMaking/Create',
сведения: в формате JSON.преобразовать в строки(DealMaster),
//традиционный: правда,
тип: "почта",
тип данных: 'JSON',
contentType: "application/json; charset=utf-8",
успех: функция (результат) {
//проверка успешно сохранена в базе данных
если (результат.Scccess == 1) {
//отправит статус со стороны сервера
предупреждение('успешно'.);
}
еще {
предупреждение(результат.экс);
}
}
});
});
//мой контроллер
public JsonResult Create( ClsDealMaking clsDeal )
{
bool status = false;
if (ModelState.Функция IsValid)
{
using (SqlConnection sqlCon = new SqlConnection(obj_conn.Коннектикут()))
{
sqlCon.Открыть();
string query = "вставить в [dbo].[DealMaking] (DealCode,DealName,ActiveFromDate,ActiveToDate,TotalCost,DiscountInPercentage,DealOffer,Примечания) ";
query = query + "OUTPUT inserted .itemSysSeq Values(@DealCode,@DealName,@ActiveFromDate,@ActiveToDate,@TotalCost,@DiscountInPercentage,@DealOffer,@Remarks)";
Команда sqlcommand программа sqlcmd = новый sqlcommand, который(запрос, sqlCon);
программа sqlcmd.Параметры.AddWithValue("@DealCode", clsDeal.DealCode);
программа sqlcmd.Параметры.AddWithValue("@DealName", clsDeal.DealName);
программа sqlcmd.Параметры.AddWithValue("@ActiveFromDate", (object)clsDeal.ActiveFromDate.ToShortDateString() ?? Значение dbnull.Ценность);
программа sqlcmd.Параметры.AddWithValue("@ActiveToDate", (object)clsDeal.ActiveToDate.ToShortDateString() ?? Значение dbnull.Ценность);
программа sqlcmd.Параметры.AddWithValue("@TotalCost", (object)clsDeal.Totalcost в ?? Значение dbnull.Ценность);
программа sqlcmd.Параметры.AddWithValue("@DiscountInPercentage", (object)clsDeal.Скидка ?? Значение dbnull.Ценность);
программа sqlcmd.Параметры.AddWithValue("@DealOffer", (object)clsDeal.Dealoffer ?? Значение dbnull.Ценность);
программа sqlcmd.Параметры.AddWithValue("@Remarks", (object)clsDeal.Remarks ?? Значение dbnull.Ценность);
// программы sqlcmd.Параметры.AddWithValue("@DealImage", (object)clsDeal.DealImage ?? Значение dbnull.Ценность);
клсдил.DealSysSeq = (int)sqlCmd.Executescalar так();
}
}
}
return Json(JsonRequestBehavior.AllowGet);
}
а модель есть//
публичный класс ClsDealMaking
{
public int DealSysSeq { get; set; }
публичная строка DealCode { get; set; }
публичная строка DealName { get; set; }
public DateTime ActiveFromDate { get; set; }
public DateTime ActiveToDate { get; set; }
общественные двойной totalcost в { получить; набор; }
публичная двойная скидка { get; set; }
public double Dealoffer { get; set; }
замечания общественности строку { получить; набор; }
// public Byte[] DealImage { get; set; }
общедоступный виртуальный интерфейс ICollection&ЛТ;clsdealdetail&ГТ; DealDetails { получить; набор; }
}
Vincent Maverick Durano
Покажите нам, как работает ваша модель ClsDealMaking
создаваемый.
Samps Pro
это моя модель
публичный класс ClsDealMaking
{
public int DealSysSeq { get; set; }
публичная строка DealCode { get; set; }
публичная строка DealName { get; set; }
public DateTime ActiveFromDate { get; set; }
public DateTime ActiveToDate { get; set; }
общественные двойной totalcost в { получить; набор; }
публичная двойная скидка { get; set; }
public double Dealoffer { get; set; }
замечания общественности строку { получить; набор; }
// public Byte[] DealImage { get; set; }
общедоступный виртуальный интерфейс ICollection&ЛТ;clsdealdetail&ГТ; DealDetails { получить; набор; }
}
Vincent Maverick Durano
Кажется, я не могу найти никаких правил проверки, применимых к вашей модели. Для этого IsValid должен вернуть true.
Richard Deeming
"Расширение представления результатов приведет к перечислению IEnumerable"
Это не ошибка. Это просто говорит вам о том, что если вы развернете представление результатов, ему придется повторять результаты. В некоторых случаях это может изменить состояние программы, что вызовет проблемы. Но в данном случае это не вызовет никаких проблем.
Разверните представление результатов и изучите фактические ошибки состояния модели, чтобы увидеть, в чем заключается проблема.
Samps Pro
проблема в том, что я отправляю массив в модель, поэтому он дает мне ошибку
так что своего скажите им НТ используя правильную модель trpe, чтобы получить коллекцию