C# 如何使用特定视图(而不是控制器名称)返回ActionResult
我在MVC控制器中有一个SendMail方法。该方法调用其他方法ValidateLogin。这是验证登录名的签名: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
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);
}