【发布时间】:2015-01-25 17:23:33
【问题描述】:
阅读文档后,我的假设是我们可以使用 @Html.Action("ActionName", "ControllerName") 从视图中调用控制器中的操作方法。
这是一个错误的假设吗?因为如果我的逻辑/假设一开始就错了,知道会很有帮助。
我的 HomeController.cs 中有以下代码
[AllowAnonymous]
public async Task<ActionResult> DidItWork()
{
var dash = "dash equals nash";
var manager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = new ApplicationUser { UserName = "test2 username2", Email = "testemail2@gmail.com" };
var result = await manager.CreateAsync(user, "passwordGoesHere1!");
if (result.Succeeded)
{
await manager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account");
return View();
}
//AddErrors(result);
return View();
}
我的 _Layout.cshtml 中有以下脚本
@*script for someone who presses the send/email button*@
<script>
$("#sendButton").click(function () {
alert("Handler for .click() called.");
@Html.Action("DidItWork", "Home")
});
</script>
在启动程序时以及在调试过程中,DidItWork() 似乎在没有点击过 #sendButton 的情况下被调用——这是为什么呢?
单步执行时,只要用户名和电子邮件是唯一的,一切似乎都可以正常工作。但是,最后,一旦完成,它会转到@Html.Action("DidItWork", "Home") 行并引发异常。
解决此问题的想法/建议?异常信息如下:
“System.Web.HttpException”类型的异常发生在 System.Web.dll 但未在用户代码中处理 附加 信息:执行处理程序的子请求时出错 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'。 内部异常:{“未找到视图‘DidItWork’或其主人,或 没有视图引擎支持搜索的位置。以下 已搜索位置:..."}
【问题讨论】:
-
这表示未找到 view,而不是 action。您确定在适当的位置有
DidItWork视图吗? -
你使用了错误的助手使用
Url.Action() -
谢谢@KirkWoll 我没有 DidItWork 在适当的位置,因为我没有 DidItWork 视图——我认为 Html.Action 做了一些不同的事情。正如 Ehsan 提到的,我将尝试使用 Url.Action() 。也感谢 Ehsan。
标签: c# asp.net-mvc twitter-bootstrap razor html-helper