为控制器方法返回错误的视图

时间:2014-03-28 22:07:05

标签: c# asp.net-mvc asp.net-mvc-4

我有一个返回错误视图的控​​制器方法。我拥有的视图与控制器方法“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");
}

2 个答案:

答案 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方法中重新创建模型