Здравствуйте, у меня есть метод JSON Result, который выглядит так
[HttpPost]
[ValidateAntiForgeryToken]
[Audit]
public JsonResult AddUnits(int so_id, int site_id, int[] addItem_id, int[] addItem_qty, int[] addItem_disc)
{
bool canCreate = true;
string errors = "";
// Loop however many times is necessary to iterate through the largest array
for (int i = 0; i < Math.Max(Math.Max(addItem_id.Length); i++)
{
foreach (SODetails sod in db.SalesOrders.Find(so_id).SalesDetails)
{
if (i < addItem_id.Length && addItem_qty[i] != 0 && sod.ItemID == addItem_id[i] && addItem_id[i] != 365 && addItem_id[i] != 410)
{
sod.item_qty += addItem_qty[i];
sod.item_discount = addItem_disc[i];
addItem_id[i] = 0;
addItem_qty[i] = 0;
addItem_disc[i] = 0;
}
}
db.SaveChanges();
if(i < addItem_qty.Length && addItem_qty[i] != 0 )
{
SODetails sODetails = new SODetails
{
SalesOrderID = so_id,
SiteID = site_id
};
// Only add a unit to the SODetails object if it's not null and has an id and quanitity specified
if(i < addItem_id.Length && addItem_id[i] != 0 && addItem_qty[i] != 0)
{
sODetails.ItemID = addItem_id[i];
sODetails.item_qty = addItem_qty[i];
sODetails.item_discount = addItem_disc[i];
}
if (sODetails.SiteID == 0)
sODetails.SiteID = null;
SalesOrder SO = db.SalesOrders.Find(sODetails.SalesOrderID);
SODetails salesOrderDetails = db.SODetails.Add(sODetails);
salesOrderDetails.SalesOrder = SO;
Item SO_Item = db.Items.Find(sODetails.ItemID);
if (SO_Item != null)
{
if (SO.OrderType == SOType.OffSiteInventory && salesOrderDetails.siteAvailable(SO_Item) < salesOrderDetails.item_qty)
{
errors += "Not enough" + SO_Item.Name + "in inventory location";
canCreate = false;
}
else {
sODetails.item_qty = sODetails.item_qty == null ? 0 : sODetails.item_qty;
int qtyOrdered = sODetails.item_qty == null ? 0 : (int)sODetails.item_qty;
salesOrderDetails.dynamicItem_qty = qtyOrdered;
if (SO_Item.SalesOrderMessage != null)
TempData["SalesOrderMessage"] = SO_Item.SalesOrderMessage;
}
}
if (!canCreate)
{
var errorMessage = string.Join(",", errors);
var stock = new { Success = "False", Message = errorMessage };
return Json(stock, JsonRequestBehavior.AllowGet);
}
db.SODetails.Add(sODetails);
}
}
db.SaveChanges();
var result = new { Success = "True" };
return Json(result, JsonRequestBehavior.AllowGet);
}
И функция AJAX, которая взаимодействует с ним, выглядит следующим образом
$.ajax({
type: "POST",
url: "@IGT.baseUrl/SODetailsAjax/AddUnits",
traditional: true,
data: {
__RequestVerificationToken: token,
so_id: @Int32.Parse(Request["orderId"]),
site_id: site,
addItem_id: items,
addItem_qty: itemsqty,
addItem_disc: itemsdisc,
addComp_id: comps,
addComp_qty: compsqty,
addComp_disc: compsdisc,
addPart_id: parts,
addPart_qty: partsqty,
addPart_disc: partsdisc
},
success: function (data) {
if(data.Success){
location.href = "../SalesOrders/Details?id=@so.ID";
}
else{
var errorMessage = data.Message;
}
},
error: function (jqXHR, status, error) {
alert("Error:" + error);
}
});
Но это в настоящее время не работает. Он всегда имеет значение data.Success
как истинное, и я не могу заставить его отображать сообщения об ошибках, которые он получил из метода контроллера, даже когда я заставляю оба условия возвращать сообщение об ошибке. Как я могу изменить свой код, чтобы он не возвращался как успешный, если это не так, и успешно возвращать сообщение об ошибке?