【问题标题】:Wrong view being returned for controller method控制器方法返回错误的视图
【发布时间】:2014-03-28 22:07:04
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    在您的 ManageTasks 操作中,您返回 AssignTask(model)。这不起作用,因为请求上下文仍然记得用户实际调用了 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”。

    【讨论】:

    • 您也可以在从其他方法返回时指定视图名称;否则,视图没有名称,但返回的是用户实际调用的操作的名称(它在当前请求的 MVC 路由数据中)。
    【解决方案2】:

    你不能那样重定向。而不是返回您需要的 AssignTask

    return RedirectToAction("AssignTask");
    

    并在那里传递一个 id 或其他东西。您将需要在您的 AssignTask 方法中重新创建模型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多