cle*_*ent 23 c# asp.net-mvc asp.net-mvc-4
我在MVC Controller中有一个SendMail方法.这个方法调用其他方法ValidateLogin.这是验证登录的签名:
private ActionResult ValidateLogin(Models.ResetPassword model)
Run Code Online (Sandbox Code Playgroud)
当我从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: ...
Run Code Online (Sandbox Code Playgroud)
这是SendMail的代码:
public ActionResult SendMail(string login)
{
return ValidateLogin(login);
}
Run Code Online (Sandbox Code Playgroud)
如何覆盖return语句中的View?
提前致谢
小智 41
private ActionResult SendMail(string login)
{
return View("~/Views/SpecificView.cshtml")
}
Run Code Online (Sandbox Code Playgroud)
您可以通过明确指向其位置直接指向特定视图.
该View方法有一个重载,它获取一个字符串viewName.有时你想传递一个string模型,asp.net框架会混淆它试图找到一个带有值的视图string.尝试这样的事情:
public ActionResult SendMail(string login)
{
this.Model = login; // set the model
return View("ValidateLogin"); // reponse the ValidateLogin view
}
Run Code Online (Sandbox Code Playgroud)
最后,这是解决方案
return View("ResetPassword", new ResetPassword
{
fields= fields
});
Run Code Online (Sandbox Code Playgroud)
如果 SendMail 是 POST,则应使用 POST-REDIRECT-GET 模式
public ActionResult SendMail(string login)
{
...
return RedirectToAction("ResetPassword", login);
}
public ActionResult ResetPassword(string login)
{
...
return View("ResetPassword", login);
}
Run Code Online (Sandbox Code Playgroud)
这将保护您免受 IE 中重复发布的影响
| 归档时间: |
|
| 查看次数: |
71358 次 |
| 最近记录: |