C# 如何从方法中的对象检索值以在另一个方法中使用它?

C# 如何从方法中的对象检索值以在另一个方法中使用它?,c#,asp.net-mvc,asp.net-core,model-view,C#,Asp.net Mvc,Asp.net Core,Model View,我知道这个问题被问了很多时间,但它似乎对我不起作用。你能不能帮我一个忙,或者给我一个类似问题的链接 我有一个对象“ws”,我想捕获工作移位ID,这样我就可以在CreateSharedView中使用它 Ps:对不起我的英语,我是c#的新手,所以请容忍我。多谢各位 编辑:我想从Create中检索ws.WorkShiftId,将其放入CreateSharedView中的task.WorkShiftId中。可能吗 public IActionResult Create()

我知道这个问题被问了很多时间,但它似乎对我不起作用。你能不能帮我一个忙,或者给我一个类似问题的链接

我有一个对象“ws”,我想捕获工作移位ID,这样我就可以在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);
        }```


public IActionResult Create()
{
ViewData[“HoleId”]=新的选择列表(_context.Hole,“HoleId”,“HoleName”);
ViewData[“SupplierId”]=新的选择列表(_context.Supplier,“SupplierId”,“SupplierName”);
ViewData[“SurveyLocationId”]=新的选择列表(_context.SurveyLocation,“SurveyLocationId”,“SurveyLocation1”);
ViewData[“ZoneId”]=新的选择列表(_context.Zone,“ZoneId”,“ZoneName”);
返回视图();
}
//POST:工作班次详细视图模型/创建
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建(Workshift DetailViewModel Workshift DetailViewModel)
{
如果(!ModelState.IsValid)
{
工作档ws=新工作档();
ws.StartDay=workshift detailviewmodel.StartDay;
ws.EndDay=workshift detailviewmodel.EndDay;
ws.SupplierId=workshift detailviewmodel.SupplierId;
ws.SurveyLocationId=1;
ws.ZoneId=workShiftDetailViewModel.ZoneId;
ws.HoleId=workShiftDetailViewModel.HoleId;
_Add(ws);
wait_context.SaveChangesAsync();
foreach(workShiftDetailViewModel.WorkShiftEmployees中的WorkServiceModel成员)
{
if(member.isDeleted==false){
Workshift团队emp=新的Workshift团队();
emp.EmployeeId=member.EmployeeId;
emp.RoleId=member.RoleId;
emp.WorkShiftId=ws.WorkShiftId;
测试=ws.WorkShiftId;
_添加(emp);
}
}
返回重定向到操作(name of(CreateSharedView));
}
public IActionResult CreateSharedView()
{
ViewData[“TaskId”]=新建选择列表(_context.Task,“TaskId”,“TaskDescription”);
ViewData[“WorkShiftTaskId”]=新建选择列表(_context.WorkShift,“WorkShiftId”,“WorkShiftId”);
返回视图();
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务CreateSharedView(SharedViewModel SharedViewModel,
SurveyViewModel SurveyViewModel,
工作班次(任务)
{
if(ModelState.IsValid)
{
Workshift task=新的Workshift task();
task.WorkShiftTaskId=sharedViewModel.WorkShiftTaskId;
task.TaskId=sharedViewModel.TaskId;
_添加(任务);
wait_context.SaveChangesAsync();
}
返回视图(sharedViewModel);
}```

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


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


最简单的方法是在启动后,使用
会话
存储并获取
ws.WorkShiftId

Create
POST操作中:

HttpContext.Session.SetInt32("wsId", ws.WorkShiftId);
task.WorkShiftId = HttpContext.Session.GetInt32("wsId");
CreateSharedView
POST action中:

HttpContext.Session.SetInt32("wsId", ws.WorkShiftId);
task.WorkShiftId = HttpContext.Session.GetInt32("wsId");
另一种更复杂的方法是,在重定向或使用
TempData
时,可以将
ws.WorkShiftId
作为参数传递:

创建
后期操作:

 //Or TempData["myId"] = ws.WorkShiftId;
 return RedirectToAction(nameof(CreateSharedView),new { workShiftId= ws.WorkShiftId});
CreateSharedView
获取操作:

public IActionResult CreateSharedView([FromQuery]int? workShiftId)
{
    //Or  ViewData["workShiftId"] = TempData["myId"]
    ViewData["workShiftId"] = workShiftId;
    return View();
}
CreateSharedView
视图:

<form asp-action="CreateSharedView">

    <input type="hidden" name="workShiftId" value="@ViewBag.workShiftId" />
</form>

最简单的方法是在启动后,使用
会话
存储并获取
ws.WorkShiftId

Create
POST操作中:

HttpContext.Session.SetInt32("wsId", ws.WorkShiftId);
task.WorkShiftId = HttpContext.Session.GetInt32("wsId");
CreateSharedView
POST action中:

HttpContext.Session.SetInt32("wsId", ws.WorkShiftId);
task.WorkShiftId = HttpContext.Session.GetInt32("wsId");
另一种更复杂的方法是,在重定向或使用
TempData
时,可以将
ws.WorkShiftId
作为参数传递:

创建
后期操作:

 //Or TempData["myId"] = ws.WorkShiftId;
 return RedirectToAction(nameof(CreateSharedView),new { workShiftId= ws.WorkShiftId});
CreateSharedView
获取操作:

public IActionResult CreateSharedView([FromQuery]int? workShiftId)
{
    //Or  ViewData["workShiftId"] = TempData["myId"]
    ViewData["workShiftId"] = workShiftId;
    return View();
}
CreateSharedView
视图:

<form asp-action="CreateSharedView">

    <input type="hidden" name="workShiftId" value="@ViewBag.workShiftId" />
</form>

不清楚你的意思。当你说“在另一个方法中使用它”时,你指的是哪种方法?对不起,我想从Create中检索ws.WorkShiftId,将其放入CreateSharedView中的task.WorkShiftId。可能吗?你想调用CreateSharedView()的GET还是POST版本从Create内部?看起来您已经在调用RedirectToAction()命名CreateSharedView时,但这将解析为GET方法。因此我假设您要调用POST方法?@robbpriestley是的,没错。很抱歉,我的问题不清楚。谢谢您花时间理解我试图做的事情。不清楚您的意思。当您说“在其他方法中使用它”时,您指的是哪种方法?抱歉,我想从Create中检索ws.WorkShiftId,将其放入CreateSharedView中的task.WorkShiftId。是否可能?是否要从Create中调用CreateSharedView()的GET或POST版本?看起来您已经在调用RedirectToAction()虽然命名CreateSharedView,但这将解析为GET方法