首页 > 解决方案 > 如何从方法中的对象中检索值以在另一个方法中使用它?

问题描述

我知道这个问题已经问了很多时间,但它似乎对我不起作用。你能帮忙或提供一个类似问题的链接吗?

我有一个对象“ws”,我想捕获WorkShiftID,以便在 CreateSharedView 中使用它。

Ps:对不起我的英语,我是c#的新手,所以请多多包涵。谢谢

编辑:我想从 Create 中检索 ws.WorkShiftId 以将其放入 CreateSharedView 中的 task.WorkShiftId 中。可能吗?

        public IActionResult Create()
        {
            ViewData["HoleId"] = new SelectList(_context.Hole, "HoleId", "HoleName");
            ViewData["SupplierId"] = new SelectList(_context.Supplier, "SupplierId", "SupplierName");
            ViewData["SurveyLocationId"] = new SelectList(_context.SurveyLocation, "SurveyLocationId", "SurveyLocation1");
            ViewData["ZoneId"] = new SelectList(_context.Zone, "ZoneId", "ZoneName");

            return View();
        }

        // POST: WorkShiftDetailViewModels/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create(WorkShiftDetailViewModel workShiftDetailViewModel)
        {

            if (!ModelState.IsValid)
            {
                WorkShift ws = new WorkShift();
                ws.StartDay = workShiftDetailViewModel.StartDay;
                ws.EndDay = workShiftDetailViewModel.EndDay;
                ws.SupplierId = workShiftDetailViewModel.SupplierId;
                ws.SurveyLocationId = 1;
                ws.ZoneId = workShiftDetailViewModel.ZoneId;
                ws.HoleId = workShiftDetailViewModel.HoleId;
                _context.Add(ws);
                await _context.SaveChangesAsync();

                foreach (WorkerViewModel member in workShiftDetailViewModel.WorkShiftEmployees)
                {
                    if (member.isDeleted == false) {
                        WorkShiftTeam emp = new WorkShiftTeam();
                        emp.EmployeeId = member.EmployeeId;
                        emp.RoleId = member.RoleId;
                        emp.WorkShiftId = ws.WorkShiftId;
                        test = ws.WorkShiftId;
                        _context.Add(emp);
                    }
                }

                return RedirectToAction(nameof(CreateSharedView));

            }

        public IActionResult CreateSharedView()
        {

            ViewData["TaskId"] = new SelectList(_context.Task, "TaskId", "TaskDescription");
            ViewData["WorkShiftTaskId"] = new SelectList(_context.WorkShift, "WorkShiftId", "WorkShiftId");

            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> CreateSharedView(SharedViewModel sharedViewModel, 
                                                          SurveyViewModel surveyViewModel,
                                                          WorkShiftTask task)
        {
            if (ModelState.IsValid)
            {

                WorkShiftTask task = new WorkShiftTask();
                task.WorkShiftTaskId = sharedViewModel.WorkShiftTaskId;
                task.TaskId = sharedViewModel.TaskId;
                _context.Add(task);

                await _context.SaveChangesAsync();
            }
            return View(sharedViewModel);
        }```


标签: c#asp.net-mvcasp.net-coremodel-view

解决方案


CreateSharedView POST 方法基本上只是将 WorkShiftTask 添加到数据库中。因此,与其胡乱尝试从另一个调用一个 POST 方法,不如从 Create() 方法内部执行此操作:

foreach (WorkerViewModel member in workShiftDetailViewModel.WorkShiftEmployees)
{
    if (member.isDeleted == false)
    {
        WorkShiftTeam emp = new WorkShiftTeam();
        emp.EmployeeId = member.EmployeeId;
        emp.RoleId = member.RoleId;
        emp.WorkShiftId = ws.WorkShiftId;
        // test = ws.WorkShiftId; test? no. defined where?
        _context.Add(emp);

        WorkShiftTask task = new WorkShiftTask();
        task.WorkShiftId = ws.WorkShiftId;  // There's the ws.WorkShiftId you were mentioning...
        // set other members of "task"
        _context.Add(task);

        await _context.SaveChangesAsync();
    }
}

推荐阅读