【问题标题】:How to get variables from another controller如何从另一个控制器获取变量
【发布时间】:2015-05-19 12:01:54
【问题描述】:

我有两个控制器:工作和家庭

现在作业计算停止作业的数量以及在哪个位置,如下所示

public void Stopped()
    {

        int HBAStop = db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 1).Count();
        int CRStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 2).Count();
        int MAStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 3).Count();
        int QCStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 4).Count();
        int LTStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 5).Count();
        int PTStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 6).Count();
        int SPStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 7).Count();

    }

然后我想在主控制器中初始化作业控制器并从stopped()方法中获取各个变量,如下所示

 ViewBag.HBAStopped = j.Stopped();

如何将 HBAStop 变量添加到 viewbag 中?我可以通过将它们分别设置为返回方法来解决所有这些问题,但这相当于大约 30 个方法,而且看起来有点矫枉过正和不整洁。我尝试了各种方法都没有成功,返回方法是目前唯一的选择

如果需要,我可以提供更多信息,谢谢

【问题讨论】:

  • 你需要在其他控制器上再次获得计数db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 1).Count()

标签: c# asp.net-mvc asp.net-mvc-4 controller


【解决方案1】:

似乎每个停止计数之间的唯一区别是LocationID。在这种情况下,你可以只用一个方法来处理它们:

public int GetStoppedCount(int locationId)
{
     return db.Jobs.Where(x => x.Status == "Stopped" 
            && x.LocationID == locationId).Count();
}

你可以这样做:

ViewBag.HBAStopped = GetStoppedCount(1);

等等……

顺便说一句,我不会过分依赖幻数,例如

db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 1).Count();

1 有点模棱两可。首选枚举或静态常量,例如:

public static class LocationConstants
{
     public const int HBAStop = 1;
     public const int CRStop = 2;

     // etc...
}

你可以这样做:

ViewBag.HBAStopped = GetStoppedCount(LocationConstants.HBAStop);

这更具可读性。

【讨论】:

  • @ataravati 你能解释一下它为什么不能回答这个问题吗? OP 刚刚声明确实如此。
  • 对不起!问题不清楚。我虽然 OP 不知道如何从另一个控制器调用该函数。
  • 啊,在这种情况下不用担心:)
  • 感谢@DGibbs 提供的其他信息,请问您将 locationConstants 放在哪里?在家里或工作控制器?我只是想通过最佳实践,我仍然掌握这一切,更愿意了解所有最好的方法
  • 我不会把它放在其中任何一个中。它应该完全分开。在我们的项目中,我们通常有一个 Constants 类,这些类作为子类,例如 Constants.Location.HBAStop
【解决方案2】:

//1.创建结构:

  struct JobStops
{
    int HBAStop;
    int CRStop;
    int MAStop;
    int QCStop;
    int LTStop;
    int PTStop;
    int SPStop;

 }

//2- 像这样更新你的方法:

public JobStops Stopped()
    {
        JobStops _jobstops ;
        _jobstops. HBAStop = db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 1).Count();
        _jobstops. CRStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 2).Count();
        _jobstops. MAStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 3).Count();
        _jobstops. QCStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 4).Count();
        _jobstops. LTStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 5).Count();
        _jobstops. PTStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 6).Count();
        _jobstops. SPStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 7).Count();
    return _jobstops;

}

//3- ViewBag.HBAStopped = j.Stopped();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多