【问题标题】:not all code paths return an value error for a timer并非所有代码路径都为计时器返回值错误
【发布时间】:2017-05-26 11:13:02
【问题描述】:

订单控制器

public async Task<ActionResult> FirstClassCreate(FormCollection values)
{

    var order = new Order();
    TryUpdateModel(order);
    var customer = db.Users.FirstOrDefault(x => x.Email == User.Identity.Name);
    var cart = ShoppingCart.GetCart(this.HttpContext);

    try
    {
        //I need to get the order.timeleft to start a count down

        order.timeleft = timer(); 
        //Save Order
        storeDB.Orders.Add(order);
        await storeDB.SaveChangesAsync();
        //Process the order
        cart = ShoppingCart.GetCart(this.HttpContext);
        order.Total = cart.GetFirstClass();

        order = cart.CreateOrder(order);

        return RedirectToAction("FirstClass", "Checkouts");
    }
    catch
    {
        //Invalid - redisplay with errors
        return View(order);
    }
}

我需要计时器每秒减少 1 次,并且每次 = 0 时将 timerleft 返回为 false,但是我遇到了公共 ActionResult 计时器突出显示计时器状态的问题,即“.timer(Order)”:并非所有代码路径返回一个值

public ActionResult timer(Order order)
{
    int time;
    order.timeleft = true;
    time = 30;
    do
    {
        if (time > 0)
        {


            time = time - 1;
        }
        else
        {
            // If the user ran out of time, stop the timer, set timeleft = false
            var orderToBeChanged = db.Orders
        .Where(o => o.HasPaid == false && o.Email == User.Identity.Name)
              .OrderByDescending((o => o.OrderDate)).First();
            order.timeleft = false;
            db.SaveChanges();


        }
    } while (time > 0);
}

【问题讨论】:

  • 您的timer 方法的返回类型为ActionResult,但实际上从未返回任何内容。

标签: c# timer asp.net-mvc-5


【解决方案1】:

ActionResult 类型的方法必须返回一个 ActionResult,即

public ActionResult Timer(Order order)
{
    ...
    return myActionResult;
}

或者,如果您不希望它返回任何内容,请将其标记为 void

public void Timer(Order order)
{
    ...
}

【讨论】:

    【解决方案2】:

    在函数public ActionResult timer(Order order) 在任何地方你都不返回任何值,并且在标题中你说这个函数返回类型ActionResult

    在您的情况下,您可以通过这种方式修改 timer 函数:

    public bool timer(Order order)
    {
        ...
        } while (time > 0);
    
        return order.timeleft;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-01
      • 2014-04-16
      • 2015-02-07
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多