ASP.NET Передача параметров и возвращаемых значений - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь понять, как правильно передать параметр и, что более важно, вернуть одно или несколько значений.

В основном методе у меня есть:

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

Передача этого параметраto 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
        }
    }
    

проблема:

Когда я возвращаюсь к основному методу, у меня есть Список, ожидающий заполнения с результатом ListaHechosFinanza, но я получаю сообщение:

Имя 'ListaHechosFinanza' не существует в реальном контексте

Должен ли я объявить пустой List<HechosFinanza> в методе main, передать его в качестве параметра и позволить емубыть изменены с помощью 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 голосов
/ 16 октября 2018

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, чтобы понять область действия переменных, которые лежат в основе обмена данными и доступа.

Кроме того, всегда код для интерфейса, а не для реализации.Более подробная информация здесь - Что означает «программировать на интерфейс»?

...