我有一个返回错误视图的控制器方法。我拥有的视图与控制器方法“AssignTask.cshtml”的名称相同。该方法是“public virtual ActionResult AssignTask(ManageTaskModel model)”
谁能看到我做错了什么?
[HttpGet]
public virtual ActionResult ManageTasks()
{
try
{
var model = new ManageTaskModel ();
model.assignedPSUsers = Orchestrator.GetAssignedPSUsers();
return View(model);
}
catch (Exception e)
{
ModelState.AddModelError("ErrorMsg", e.Message);
};
return this.RedirectToAction("Index");
}
[HttpPost]
public virtual ActionResult ManageTasks(ManageTaskModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
try
{ //User has seleced the user that they want to see Tasks for
if (model.selectedUser != null && model.newUser==null)
{
model.assignedPSUsers = Orchestrator.GetAssignedPSUsers();
model.FcvsTaskList = Orchestrator.GetTasksForAssignedPSUser(model.selectedUser);
return AssignTask(model);
}
}
catch (Exception e)
{
ModelState.AddModelError("ErrorMsg", e.Message);
return View(model);
}
return this.RedirectToAction("Index");
}
[HttpGet]
public virtual ActionResult AssignTask(ManageTaskModel model)
{
if (model.selectedUser != null && model.newUser == null)
{
**return View(model);** //returning the ManageTask instead of AssignTask View
}
return this.RedirectToAction("Index");
}
答案 0 :(得分:1)
在ManageTasks操作中,返回AssignTask(模型)。这不起作用,因为请求上下文仍然记得用户实际上调用了ManageTasks。这就是为什么它返回ManageTasks的视图。
正确的做法就是:
return RedirectToAction("AssignTask", model); // remember to pass the model here
如果你把这一行放在AssignTask中,你可以看到:
HttpContext.Request.Path
如果使用return AssignTask(model)从ManageTasks访问它,则值为" / YourController / ManageTasks"。
如果您直接从浏览器或使用RedirectToAction调用此操作,则值为" / YourController / AssignTask"。
答案 1 :(得分:0)
你不能那样重定向。而不是返回AssignTask你需要
return RedirectToAction("AssignTask");
并在那里传递id或其他内容。您需要在AssignTask方法中重新创建模型