【问题标题】:Passing parameters to method将参数传递给方法
【发布时间】:2018-01-10 09:22:50
【问题描述】:

我有 js 代码,我通过参数将数据传递给 repo 方法。

这里是repo方法:

public List<SpeedLimitViewModel> GetSpeedData(decimal imei, DateTime start, DateTime end)
    {
        using (TraxgoDB ctx = new TraxgoDB())
        {
            List<SpeedLimitViewModel> alldata = new List<SpeedLimitViewModel>();
            var alllogs = ctx.Logging.OrderByDescending(x => x.LogID).ToList();

            for (int i = 1; i < alllogs.Count; i++)
            {
                alldata.Add(new SpeedLimitViewModel
                {
                    Imei= alllogs[i].Imei,
                    Latitude2 = alllogs[i].Latitude,
                    Longitude2 = alllogs[i].Longitude,
                    Speed = alllogs[i].Speed
                });
            }
            return alldata;
        }


    }

我在控制器中这样调用这个方法:

  public JsonResult SpeedData()
    {
        var speeddata = repoEntities.GetSpeedData();
        return Json(speeddata.ToArray(), JsonRequestBehavior.AllowGet);
    }

但我有错误

严重性代码描述项目文件行抑制状态 错误 CS7036 没有给出与 'ReportsRepositoryEntities.GetSpeedData(decimal, DateTime, DateTime)' Traxgo.TrackerWeb C:\Users\EugeneSukhomlyn\Source\Workspaces\TraxgoWeb\Traxgo.TrackerWeb\ 所需的形式参数 'imei' 相对应的参数Controllers\ReportsController.cs 94 活动

我的问题在哪里?

【问题讨论】:

  • 您的方法有 3 个参数 - 您需要在调用该方法时为它们传递值(尽管您似乎从未使用过它们,所以您可以删除它们)

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


【解决方案1】:
public JsonResult SpeedData(decimal imei, DateTime start, DateTime end)
    {
        var speeddata = repoEntities.GetSpeedData(imei, start, end);
        return Json(speeddata.ToArray(), JsonRequestBehavior.AllowGet);
    }

【讨论】:

  • 在方法中,我也需要留下参数吗?
  • 在repo方法中,不需要改变任何东西,但是如果从View中调用控制器方法,则需要传递这3个参数(imei,start,end)。
  • 是的,我从 View 中调用控制器方法,在 repo 中调用控制器方法中的方法。
  • 您能再试一次吗?现在应该可以正常工作了。如果仍然无法正常工作,请将您的代码放入查看您调用控制器的方式中。
【解决方案2】:

你的方法是这样的:

GetSpeedData(decimal imei, DateTime start, DateTime end)

但你这样称呼它:

GetSpeedData()

另外,我没有看到您在方法中的任何位置使用 imeistartend,因此您应该从方法定义中删除它们

所以您应该将参数传递给您的函数,可能来自您的控制器方法,如下所示:

public JsonResult SpeedData(decimal imei, DateTime start, DateTime end)
{
    var speeddata = repoEntities.GetSpeedData(imei, start, end);
    return Json(speeddata.ToArray(), JsonRequestBehavior.AllowGet);
}

或者参数可能不是来自控制器方法,而是来自其他地方 - 没关系,在您当前的设计中,您必须将定义的参数传递给您的 GetSpeedData 函数。

或者你可以这样定义你的函数(使用可选参数):

public List<SpeedLimitViewModel> GetSpeedData(decimal imei = 0, DateTime start = new DateTime(), DateTime end = new DateTime())
{
}

您甚至可以通过调用GetSpeedData() 来调用它(所有参数都将具有作为可选参数的默认值提供的值)

【讨论】:

  • 我会在方法中使用参数,所以我需要在repo方法中。
【解决方案3】:

您需要删除函数的参数,或者您需要像 Paweł 提到的那样在方法定义中设置默认值,或者最后您可以将方法定义重载到带参数和不带参数的版本。

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 2017-01-05
    • 2013-10-04
    • 2013-05-19
    • 2013-02-08
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多