如何返回特定View(而不是控制器名称)的ActionResult

问题描述 投票:0回答:5

我在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 语句上的视图?

提前致谢

c# asp.net .net asp.net-mvc
5个回答
64
投票
private ActionResult SendMail(string login)
{
    return View("~/Views/SpecificView.cshtml")
}

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


13
投票

最后,这就是解决方案:

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

10
投票

View
方法有一个重载,可以将字符串获取到
viewName
。有时您想将
string
作为模型传递,而 ASP.NET 框架会混淆它试图查找具有值
string
的视图。尝试这样的事情:

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

5
投票

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

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

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

这将保护您免受 IE 中重复发布的影响


2
投票

您可以通过这样的名称返回视图

return View("viewnamehere");
© www.soinside.com 2019 - 2024. All rights reserved.