Используйте один метод CREATE для нескольких страниц ASP.NET Core MVC - PullRequest
0 голосов
/ 18 января 2019

У меня есть несколько моделей, которые обновляются в моей базе данных. Каждая модель, например задачи, поставщики и счета-фактуры, привязана к одной работе. Когда я создаю и редактирую одну из этих моделей (используя соответствующую страницу CRUD), я хочу, чтобы она открыла страницу создания / редактирования для всех доступных моделей. Например, если я создаю новый сайт вакансий, я также хочу добавить опцию поставщиков, задач и т. Д. Если я редактирую сайт вакансий, я также хочу возможность редактировать все другие модели. На самом деле получить информацию об этих моделях на одной странице было просто. Заставить функцию создания работать таким же образом сложнее. Можно ли использовать один из методов создания моего контроллера, чтобы служить методом создания для другого контроллера / модели? Можно ли сделать то же самое для функций редактирования и удаления? Вот как выглядит мой контроллер для метода Create.

// GET: Towers/Create
        public IActionResult Create()
        {
            return View();
        }

        // POST: Towers/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Id,SiteId,SiteName,TowerHeight,TowerType,TaskOrder,Street,City,State,Zip,CrossStreet,Latitude,Longitude,Notes,StartDate,EndDate,ParsonsPm,ParsonsRe,DecomCrewNum,ActualStartDate,ActualEndDate")] Tower tower)
        {
            if (ModelState.IsValid)
            {
                _context.Add(tower);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }

            return View(tower);
        }

И метод CREATE для контроллера Vendor (я не редактировал его из каких dotnet строительных лесов)

// GET: Vendors/Create
        public IActionResult Create()
        {
            ViewData["TowerId"] = new SelectList(_context.Tower, "Id", "Id");
            return View();
        }

        // POST: Vendors/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("VendorId,CraneVendor,CranePhone,PortableToiletVendor,PortableToiletPhone,ForkliftVendor,ForkliftPhone,SkidSteerVendor,SkidSteerPhone,ExcavatorVendor,ExcavatorPhone,LoaderVendor,LoaderPhone,SteelDumpstersVendor,SteelDumpstersPhone,ConcreteDumpstersVendor,ConcreteDumpstersPhone,CraneCallOffNum,CraneOnRent,CraneOffRent,PortableToiletOnRent,PortableToiletOffRent,ForkliftOnRent,ForkliftOffRent,SkidSteerOnRent,SkidSteerOffRent,ExcavatorOnRent,ExcavatorOffRent,LoaderOnRent,LoaderOffRent,SteelDumpstersOnRent,SteelDumpstersOffRent,ConcreteDumpstersOnRent,ConcreteDumpstersOffRent,ForkliftCallOffNum,SkidSteerCallOffNum,ExcavatorCallOffNum,LoaderCallOffNum,SteelDumpsterCallOffNum,ConcreteDumpsterCallOffNum,TowerId")] Vendor vendor)
        {
            if (ModelState.IsValid)
            {
                _context.Add(vendor);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            ViewData["TowerId"] = new SelectList(_context.Tower, "Id", "Id", vendor.TowerId);
            return View(vendor);
        }

Для справки, это мой метод ДЕТАЛИ в моем TowerController

// GET: Towers/Details/5
        public async Task<IActionResult> Details(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var tower = await _context.Tower
                .Include(v => v.Vendor)
                .FirstOrDefaultAsync(m => m.Id == id);
            if (tower == null)
            {
                return NotFound();
            }

            return View(tower);
        }

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

...