ASP.NET传递参数和返回值

时间:2018-10-16 06:29:11

标签: asp.net asp.net-core reference

我试图了解如何正确传递参数,更重要的是,返回一个或多个值。

在主要方法中,我有:

    public IActionResult FinVD()
    {

        var user = from d in _context.Roles
                   join userRole in _context.UserRoles on d.Id equals userRole.RoleId
                   join usuario in _context.Users on userRole.UserId equals usuario.Id
                   where usuario.UserName == User.Identity.Name
                   select d;

        var cargo = user.FirstOrDefault();
        var cargodesc = cargo.Name;

        ListaTienda(cargodesc);
        //...More code
        FinanzaDIndexData ventadiaria = new FinanzaDIndexData()
        {
            MedioPagos = medio_pago,
            hechosf_periodo = fecha,
            //Here lies the problem. Is not initialized in the context if the code stays like this.
            HechosFinanzaL = ListaHechosFinanza,
        };
        return View(ventadiaria);
        }

将此参数传递给ListaTienda将执行以下操作:

  • 生成一个ViewBag
  • 生成列表

    private void ListaTienda(string cargodesc)
    {
        if (cargodesc == "Jefe")
        {
            List<Tienda> ListaTienda = new List<Tienda>();
            ListaTienda = _context.Stores.Where(j => j.Districts.Provincias.provincia_jefe == User.Identity.Name && j.tienda_vigencia_reg == 1).OrderBy(j => j.tienda_nombre).ToList();
            ListaTienda.Insert(0, new Tienda { tienda_id = 0, tienda_nombre = "-- Seleccione Tienda --" });
            ViewBag.ListaTienda = ListaTienda;
    
            List<HechosFinanza> ListaHechosFinanza = new List<HechosFinanza>();
            ListaHechosFinanza = _context.HechosFinanza.Include(f => f.Devices).ThenInclude(f => f.Machines).ThenInclude(f => f.Stores).ThenInclude(f => f.Districts).ThenInclude(f => f.Provincias)
                .Where(f => f.finanzas_id == 1 &&
                f.Devices.Machines.Stores.Districts.Provincias.provincia_jefe == User.Identity.Name)
                .OrderBy(f => f.Devices.Machines.Stores.tienda_nombre).ToList();
               //...more code
        }
    }
    

问题:

当我回到main方法时,我有一个列表等待填充ListaHechosFinanza的结果,但是我得到消息:

  
    

名称'ListaHechosFinanza'在实际上下文中不存在

  

我是否必须在main方法中声明一个空的List<HechosFinanza>,将其作为参数传递并使用ref进行修改?还是没有它,因为是列表?这样吗?:

    public IActionResult FinVD()
    {

        var user = from d in _context.Roles
                   join userRole in _context.UserRoles on d.Id equals userRole.RoleId
                   join usuario in _context.Users on userRole.UserId equals usuario.Id
                   where usuario.UserName == User.Identity.Name
                   select d;

        var cargo = user.FirstOrDefault();
        var cargodesc = cargo.Name;

        List<HechosFinanza> ListaHechosFinanza = new List<HechosFinanza>();

        ListaTienda(cargodesc, ListaHechosFinanza);
        //... more code
        FinanzaDIndexData ventadiaria = new FinanzaDIndexData()
        {
            MedioPagos = medio_pago,
            hechosf_periodo = fecha,
            HechosFinanzaL = ListaHechosFinanza,
        };
        return View(ventadiaria);
    }

第2部分:

    private void ListaTienda(string cargodesc, List<HechosFinanza> ListaHechosFinanza)
    {
        if (cargodesc == "Jefe")
        {
            List<Tienda> ListaTienda = new List<Tienda>();
            ListaTienda = _context.Stores.Where(j => j.Districts.Provincias.provincia_jefe == User.Identity.Name && j.tienda_vigencia_reg == 1).OrderBy(j => j.tienda_nombre).ToList();
            ListaTienda.Insert(0, new Tienda { tienda_id = 0, tienda_nombre = "-- Seleccione Tienda --" });
            ViewBag.ListaTienda = ListaTienda;

            //List<HechosFinanza> ListaHechosFinanza = new List<HechosFinanza>();
            ListaHechosFinanza = _context.HechosFinanza.Include(f => f.Devices).ThenInclude(f => f.Machines).ThenInclude(f => f.Stores).ThenInclude(f => f.Districts).ThenInclude(f => f.Provincias)
                .Where(f => f.finanzas_id == 1 &&
                f.Devices.Machines.Stores.Districts.Provincias.provincia_jefe == User.Identity.Name)
                .OrderBy(f => f.Devices.Machines.Stores.tienda_nombre).ToList();
        }

1 个答案:

答案 0 :(得分:0)

ListaTienda()方法需要返回HechosFinanza的列表。

因此将其更改为

private IList<HechosFinanza> ListaTienda(string cargodesc, List<HechosFinanza> ListaHechosFinanza)

此外,由于此方法现在返回一个值,因此需要将其值分配给ListaHechosFinanza中的FinVD(),如下所示:

IList<HechosFinanza> ListaHechosFinanza = ListaTienda(cargodesc, ListaHechosFinanza);

此错误消息表示ListaHechosFinanza方法对变量ListaTienda不可见,因为这是局部变量。

The name 'ListaHechosFinanza' does not exist in the actual context

前往MSDN了解变量的范围,这是数据共享和访问的关键。

此外,请始终编写接口代码,而不是实现代码。更多信息在这里-What does it mean to "program to an interface"?