2014-03-28 33 views
0

我有一個控制器方法返回錯誤的視圖。我擁有的視圖與控制器方法「AssignTask.cshtml」的名稱相同。方法是「公共虛擬ActionResult AssignTask(ManageTaskModel模型)」控制器方法返回的視圖錯誤

任何人都可以看到我做錯了什麼?

[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"); 
} 

回答

1

在您的ManageTasks操作中,您返回AssignTask(模型)。這不起作用,因爲請求上下文仍然記得用戶實際上稱爲ManageTasks。這就是爲什麼它返回ManageTasks的視圖。

做正確的方法是這樣的:

return RedirectToAction("AssignTask", model); // remember to pass the model here 

你可以看到,如果你把這個行AssignTask的:

HttpContext.Request.Path 

如果你使用回AssignTask的ManageTasks訪問它(模型),值將是「/ YourController/ManageTasks」。

如果您直接從瀏覽器或使用RedirectToAction調用此操作,該值將爲「/ YourController/AssignTask」。

0

你不能重定向那種方式。而不是返回AssignTask你需要

return RedirectToAction("AssignTask"); 

並通過一個id或其他東西。您需要在AssignTask方法中重新創建模型