C# 如何使用特定视图(而不是控制器名称)返回ActionResult

C# 如何使用特定视图(而不是控制器名称)返回ActionResult,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我在MVC控制器中有一个SendMail方法。该方法调用其他方法ValidateLogin。这是验证登录名的签名: private ActionResult ValidateLogin(Models.ResetPassword model) 当我从SendMail调用ValidateLogin时,出现此异常,因为控制器尝试搜索SendMail视图,但我想加载ResetPassword视图: Global Error - The view 'SendMail' or its master was

我在MVC控制器中有一个SendMail方法。该方法调用其他方法ValidateLogin。这是验证登录名的签名:

private ActionResult ValidateLogin(Models.ResetPassword model)
当我从SendMail调用ValidateLogin时,出现此异常,因为控制器尝试搜索SendMail视图,但我想加载ResetPassword视图:

Global Error - The view 'SendMail' or its master was not found or no view engine supports the searched locations. The following locations were searched: ...
这是SendMail的代码:

public ActionResult SendMail(string login)
{
        return ValidateLogin(login);
}
如何覆盖return语句上的视图


提前感谢

查看方法有一个重载,该重载将字符串获取到一个
视图名
。有时,您希望将
字符串作为模型传递,而asp.net framework在试图查找值为
字符串
的视图时会将其混淆。试着这样做:

public ActionResult SendMail(string login)
{
   this.Model = login; // set the model
   return View("ValidateLogin"); // reponse the ValidateLogin view
}

您可以使用如下名称返回视图

return View("viewnamehere");

您可以通过明确地指向特定视图的位置来直接指向它们。

最后,这就是解决方案

return View("ResetPassword", new ResetPassword
            {
                fields= fields
            });

如果SendMail是POST,那么应该使用POST-REDIRECT-GET模式

    public ActionResult SendMail(string login)
    {
        ...        
        return RedirectToAction("ResetPassword", login);
    }

    public ActionResult ResetPassword(string login)
    {
        ...
        return View("ResetPassword", login);
    }

这将保护您不受IE中的双重帖子的影响

只是一个小小的补充:这将要求“ResetPassword.cshtml”应该位于目录“~/Views//”中。其中,仅等于所访问控制器类的名称;例如:TestController>>“~/Views/Test/ResetPassword,cshtml”将被访问以进行加载。不要在这里挣扎,否则将无法加载任何内容。;)仅当视图来自同一控制器时,否则将无法加载。
    public ActionResult SendMail(string login)
    {
        ...        
        return RedirectToAction("ResetPassword", login);
    }

    public ActionResult ResetPassword(string login)
    {
        ...
        return View("ResetPassword", login);
    }