重定向到带有ID参数的动作- . net core Web App MVC



需要一些帮助来尝试重定向到视图

我有一个名为Jobs/Index的视图/操作简而言之,这个视图抓取了一个员工列表,我为每个员工添加了一个按钮,让他们可以单击,这样他们就可以查看分配给他们的工作。每个按钮执行Jobs/EmployeeJobs/Id, Id取决于它们的员工Id。

我有一个视图/操作是jobs/EmployeeJobs/2。此视图显示分配给id为2的工作人员的所有工作的列表,但显然将根据工作人员而更改。

所以,在那个页面上我有我的EDIT, DETAILS和DELETE按钮。它们都很好。然而,当我尝试编辑一些职位信息并单击保存。我的网址指向https://localhost:44327/Jobs。

当用户点击保存时,我希望被重定向回该工作人员的视图,例如https://localhost: 44327/工作/EmployeeJobs/2 .

这是我的EmployeeJobs/2动作在我的Jobs Controller

`public async Task<IActionResult> EmployeeJobs(int? id)
{
var jobs = await _context.Jobs
.Include(j => j.Clients)
.Include(j => j.Employees)
.Include(j => j.Stage1)
.Include(j => j.Stage2)
.Include(j => j.Substages)
.Include(j => j.Substages2).Where(m => m.Employees.Id == id)
.ToListAsync();

return View(jobs);
}`

这是我的编辑/5操作在我的作业控制器或(POST)

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,JobNumber,Address,ClientID,StaffId,Notes,Stage1Id,Stage2Id,SubstagesId,Substages2Id,ConceptRequired,ConceptScheduleDate,ConceptSent,RevisionReceived,RevisionCompleted,ConceptApproved,MarketingRequired,MarketingScheduleDate,MarketingSent,MarketingCompleted,RenderRequired,RendererId,RenderSent,RenderReceived,ResourceRequired,PlannerId,ResourceScheduleDate,ResourceSent,ResourceCommentsReceived,ResourceCommentsCompeted,ResourceApproved,WorkingScheduleDate,WorkingCompleted,ReviewCompleted,TrussRequired,TrussId,TrussSent,TrussReceived,EngineerRequired,EngineerId,EngineerSent,EngineerReceived,ClientApprovalSent,ClientApprovalReceived,CouncilSubmission,CouncilId,BCNumber,RFIReceived,RFICompleted,BCGranted,AmendmentRequired,AmendmentScheduleDate,AmendmentCompleted,JobCompleted")] Jobs jobs)
{
if (id != jobs.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
_context.Update(jobs);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!JobsExists(jobs.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction("EmployeeJobs", new { id = id });
//return RedirectToAction("EmployeeJobs", new RouteValueDictionary(
//    new { controller = "Jobs", action = "EmployeeJobs", id = id }));
}
return View(jobs);
}

正如你所看到的,我已经多次尝试了两个方法或RedirectToAction。奇怪的是,我可以得到我想要的结果,显示分配给该员工的工作,当我被重定向,如果我的代码是return RedirectToAction("EmployeeJobs", new { id = 2 });

这段代码将带我回到ID为2的员工。所以希望有人能帮助我,请对我宽容一点,我对编码相当陌生

这是我的工作模型的相关信息

public class Jobs
{
public int Id { get; set; }
[Display(Name = "Job Number")]
[Required]
public int JobNumber { get; set; }
public string Address { get; set; }
// FK
[Display(Name = "Client")]
[ForeignKey("Clients")]
public int ClientID { get; set; }
// FK
[Display(Name = "Employee")]
[ForeignKey("Employees")]
public int StaffId { get; set; }

public string Notes { get; set; }
public virtual Clients Clients { get; set; }
public virtual Employees Employees { get; set; }

}

这是我的Employees Model的代码

public class Employees
{
public int Id { get; set; }
[Display(Name = "First Name")]
[RegularExpression(@"^[A-Z]+[a-zA-Zs]*$")]
[StringLength(20, MinimumLength = 3)]
[Required]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[RegularExpression(@"^[A-Z]+[a-zA-Zs]*$")]
[StringLength(20, MinimumLength = 3)]
[Required]
public string LastName { get; set; }
[Display(Name = "Contact Number")]
[StringLength(15, MinimumLength = 8)]
[Required]
public string ContactNumber { get; set; }
[StringLength(80, MinimumLength = 3)]
[Required]
public string Email { get; set; }
}

我认为您在查询数据库时索引操作错误。

这就是为什么它不能返回新视图。将employeeIdjobId混合。对于id=2,您有一个id=2的员工,那么为什么它只在id=2时工作;

你的索引操作有一个非常令人困惑的查询,而且它不是异步的。

试试这个

var jobs = await _context.Jobs
.Include(j => j.Clients)
.Include(j => j.Employees)
.Include(j => j.Stage1)
.Include(j => j.Stage2)
.Include(j => j.Substages)
.Include(j => j.Substages2)
.Where(m =>  m.Employees.Id == id)
.ToListAsync();
return View(jobs);

但是我想知道这是如何编译的

.Include(j => j.Employees)
.....
.Where(m =>  m.Employees.Id == id)

Employees是一个人吗?

更新看了你的Job类后,我认为你的where是ok的,但是你也可以使用这个

.Where(m =>  m.StaffId == id)

和修复你的编辑动作

return RedirectToAction("EmployeeJobs", new { id = job.StaffId });

现在应该可以工作了

你说过,如果你像下面这样硬编码Id,那么它是工作的:

return RedirectToAction("EmployeeJobs", new { id = 2 });

那么试试这个:

return RedirectToAction("EmployeeJobs", "Jobs", new { id = jobs.StaffId });

尝试返回一个空视图,而不必像这样传递参数

return View(); 

最新更新