使用 ID 参数重定向到操作 - .Net Core Web App MVC
Redirect To Action with ID Parameter - .NetCore Web App MVC
在尝试重定向到视图时需要一些帮助。
我有一个 view/action 叫 Jobs/Index
简而言之,这个视图抓取了一个员工列表,我已经包含了一个按钮供每个员工点击,这样他们就可以查看分配给他们的工作。每个按钮执行Jobs/EmployeeJobs/Id,ID取决于他们的员工ID。
我有一个 view/action,它是 jobs/EmployeeJobs/2。
此视图显示分配给 ID 为 2 的员工的所有工作的列表,但显然会根据员工的不同而变化。
因此,在该页面上我有编辑、详细信息和删除按钮。他们都工作正常。
但是,当我尝试编辑一些工作信息并单击保存时。我的 URL 将我定向到 https://localhost:44327/Jobs。
当用户点击保存时,我想被重定向回该工作人员的视图,例如
https://localhost:44327/Jobs/EmployeeJobs/2.
这是我在作业控制器中的 EmployeeJobs/2 操作
`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);
}`
这是我在作业控制器或 (POST)
中的 Edit/5 操作
[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; }
}
这是我的员工模型中的代码
public class Employees
{
public int Id { get; set; }
[Display(Name = "First Name")]
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$")]
[StringLength(20, MinimumLength = 3)]
[Required]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$")]
[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; }
}
你说如果你像下面这样硬编码 Id 那么它就可以工作:
return RedirectToAction("EmployeeJobs", new { id = 2 });
然后试试这个:
return RedirectToAction("EmployeeJobs", "Jobs", new { id = jobs.StaffId });
尝试返回一个空视图,而不必像这样向它传递参数
return View();
我认为您在查询数据库时在 Index 操作中出错。
这就是它不能 return 新视图的原因。您将 employeeId
与 jobId
混合在一起。对于 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是一个人吗?
更新
看到你的工作后class我觉得你的位置还可以,但你也可以用这个
.Where(m => m.StaffId == id)
并修复您的编辑操作
return RedirectToAction("EmployeeJobs", new { id = job.StaffId });
现在它应该可以工作了
在尝试重定向到视图时需要一些帮助。
我有一个 view/action 叫 Jobs/Index 简而言之,这个视图抓取了一个员工列表,我已经包含了一个按钮供每个员工点击,这样他们就可以查看分配给他们的工作。每个按钮执行Jobs/EmployeeJobs/Id,ID取决于他们的员工ID。
我有一个 view/action,它是 jobs/EmployeeJobs/2。 此视图显示分配给 ID 为 2 的员工的所有工作的列表,但显然会根据员工的不同而变化。
因此,在该页面上我有编辑、详细信息和删除按钮。他们都工作正常。 但是,当我尝试编辑一些工作信息并单击保存时。我的 URL 将我定向到 https://localhost:44327/Jobs。
当用户点击保存时,我想被重定向回该工作人员的视图,例如 https://localhost:44327/Jobs/EmployeeJobs/2.
这是我在作业控制器中的 EmployeeJobs/2 操作
`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);
}`
这是我在作业控制器或 (POST)
中的 Edit/5 操作 [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; }
}
这是我的员工模型中的代码
public class Employees
{
public int Id { get; set; }
[Display(Name = "First Name")]
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$")]
[StringLength(20, MinimumLength = 3)]
[Required]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$")]
[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; }
}
你说如果你像下面这样硬编码 Id 那么它就可以工作:
return RedirectToAction("EmployeeJobs", new { id = 2 });
然后试试这个:
return RedirectToAction("EmployeeJobs", "Jobs", new { id = jobs.StaffId });
尝试返回一个空视图,而不必像这样向它传递参数
return View();
我认为您在查询数据库时在 Index 操作中出错。
这就是它不能 return 新视图的原因。您将 employeeId
与 jobId
混合在一起。对于 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是一个人吗?
更新
看到你的工作后class我觉得你的位置还可以,但你也可以用这个
.Where(m => m.StaffId == id)
并修复您的编辑操作
return RedirectToAction("EmployeeJobs", new { id = job.StaffId });
现在它应该可以工作了