阅读完文档后我的假设是我们可以使用@ 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>
启动程序后,在调试过程中,似乎没有点击#sendButton就会调用DidItWork() - 为什么会这样?
当单步执行时,只要用户名和电子邮件是唯一的,所有内容都会正常工作。但是,最后,一旦完成,它将转到@Html.Action("DidItWork", "Home")
行并抛出异常。
解决这个问题的想法/建议?例外信息如下:
类型&#39; System.Web.HttpException&#39;的例外情况发生在 System.Web.dll但未在用户代码中处理 信息:执行处理程序的子请求时出错 &#39; System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper&#39 ;. 内部例外:{&#34;视图&#39; DidItWork&#39;或者没有找到它的主人 没有视图引擎支持搜索的位置。下列 搜索了位置:...&#34;}
答案 0 :(得分:2)
阅读完文档后我的假设是我们 可以使用@ Html.Action(“ActionName”,“ControllerName”)来调用 视图中控制器中的动作方法。
这是一个错误的假设吗?
没有
启动程序后,在调试过程中,DidItWork() 似乎没有点击#sendButton就被调用 - 为什么 是什么?
因为这就是Html.Action
助手的工作方式。它调用服务器上的操作,并在视图中插入此操作的结果。
解决这个问题的想法/建议?例外信息如下:
由于您正在讨论使用javascript调用操作,因此您不应使用服务器端视图呈现,例如Html.Action
,而应使用客户端脚本。例如,您可以使用AJAX:
<script>
$("#sendButton").click(function () {
$.ajax({
url: '@Url.Action("DitItWork", "Home")',
success: function(reuslt) {
// result will contain the execution of the DidItWork action.
// Right now it is an error, because you don't seem to have defined
// a DidItWork.cshtml page. Once you fix this it will work
// as expected
// Here you probably want to insert the result somewhere
// in your markup
}
});
// return false to cancel the default action and leave the AJAX call
return false;
});
</script>
答案 1 :(得分:1)
此代码段
@Html.Action("DidItWork", "Home")
调用DidItWork操作并返回View()。在构建期间,您实际上打开Home / DidItWork.cshtml 所以你必须将你的return语句改为现有的视图。