C# 从C中的void方法返回错误消息#

C# 从C中的void方法返回错误消息#,c#,asp.net-mvc,linq,error-handling,C#,Asp.net Mvc,Linq,Error Handling,如果条件无效,我当前正试图让我的方法返回错误消息。但我不确定如何用一种无效的方法来实现这一点 我有一个这样的方法 [HttpPost] [ValidateAntiForgeryToken] [Audit] public void AddUnits(int so_id, int site_id, int[] addItem_id, int[] addItem_qty, int[] addItem_disc) {

如果条件无效,我当前正试图让我的方法返回错误消息。但我不确定如何用一种无效的方法来实现这一点

我有一个这样的方法

        [HttpPost]
        [ValidateAntiForgeryToken]
        [Audit]
        public void AddUnits(int so_id, int site_id, int[] addItem_id, int[] addItem_qty, int[] addItem_disc)
        {
            // Loop however many times is necessary to iterate through the largest array
            for (int i = 0; i < Math.Max(Math.Max(addItem_id.Length, addComp_id.Length), addPart_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);
                    Component SO_Component = db.Components.Find(sODetails.ComponentID);
                    Part SO_Part = db.Parts.Find(sODetails.PartID);

                    if (SO_Item != null)
                    {
                        if (SO.OrderType == SOType.OffSiteInventory && sODetails.InventorySite == "Main Inventory" && SO_Item.On_Hand < salesOrderDetails.item_qty)
                        {

                            ModelState.AddModelError(string.Empty, "Not enough stock in inventory");
                                //TempData["SalesOrderMessage"] = SO_Item.SalesOrderMessage;

                        }

                        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;
                    }

                    db.SODetails.Add(sODetails);
               
                }
            }

            db.SaveChanges();
        }

[HttpPost]
[ValidateAntiForgeryToken]
[审计]
公共无效添加单位(int so_id、int site_id、int[]添加项id、int[]添加项数量、int[]添加项光盘)
{
//然而,循环多次是遍历最大数组所必需的
对于(int i=0;i
下面是我进行验证检查的代码部分

 if (SO.OrderType == SOType.OffSiteInventory && sODetails.InventorySite == "Main Inventory" && SO_Item.On_Hand < salesOrderDetails.item_qty)
                        {

                            ModelState.AddModelError(string.Empty, "Not enough stock in inventory");
                                //TempData["SalesOrderMessage"] = SO_Item.SalesOrderMessage;

                        }
if(SO.OrderType==SOType.offsite Inventory&&sODetails.InventorySite==“主库存”&&SO\u现有物料

如果条件有效,我希望它返回屏幕,并显示错误消息。但是,由于该方法是Void,我不知道如何使它做到这一点,或者我甚至不知道这是否可能。

您可以创建一个特定的异常类,您可以在Void函数中抛出它。然后在调用函数中处理此异常

class NotEnoughStockException : Exception {}
然后在您的方法中:

If no stock ...
    throw new NotEnoughStockException();
在调用方法中

try {
     call the stock method
 } catch NotEnoughStockException {
     whatever you want to do
 }

创建一个将调用stock函数的包装器函数。您确实尝试在新函数中使用catch并返回错误消息。您的Ajax应该调用新函数。

您可以抛出异常并添加机制来处理异常并在UI上显示错误。您可以抛出异常并通过显示其消息在UI上进行处理。否则,您将不得不更改为返回某种类型的状态。ASP.Net MVC操作方法不应该是
void
。调用它的是ajax函数。当我把钓索放在周围时,什么也没发生。也许我没有理解正确
class NotEnoughStockException : Exception {}