我有我的行动。多人在这个应用程序上工作,并且有可能同时点击按钮。偶尔我得到以下异常,我该如何解决这个问题?
异常
System.Web.HttpException: A public action method 'CorrectAsIsControl' was not found on controller 'Intranet.Site.Areas.OngoingProjects.Controllers.PaperSurveyEmailCleanUpController'.
Generated: Mon, 30 Jul 2012 21:38:49 GMT
System.Web.HttpException (0x80004005): A public action method 'CorrectAsIsControl' was not found on controller 'Intranet.Site.Areas.OngoingProjects.Controllers.PaperSurveyEmailCleanUpController'.
at System.Web.Mvc.Controller.HandleUnknownAction(String actionName)
at System.Web.Mvc.AsyncController.<>c__DisplayClass19.<BeginExecuteCore>b__15()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.AsyncController.EndExecuteCore(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.AsyncController.EndExecute(IAsyncResult asyncResult)
at System.Web.Mvc.AsyncController.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__4(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
动作:
[HttpPost]
[NoCaching]
public ActionResult CorrectAsIsControl()
[HttpPost]
[NoCaching]
public ActionResult UnreadableControl()
NoCaching过滤器
public partial class NoCaching : ActionFilterAttribute
{
#region OVERRIDES
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
#endregion
}
Ajax Post
_performStaticActions: function ($click) {
var id = $click.attr("rel");
var link = $click.attr("href");
if (id == "")
jMessageError("Unable to find Id, operation aborted!", $click, false, true);
else if (link == "")
jMessageError("Unable to find action link, operation aborted!", $click, false, true);
else {
jMessage("Processing request...", $click, true, false);
//link = link + "?badEmailId=" + id;
$.ajax({
cache: false,
url: link,
type: Ajax.MethodType.POST,
data: { badEmailId: id},
error: function (xhr, ajaxOptions, thrownError) {
jMessageError(xhr.responseText, $click, false, true);
},
success: function (result) {
if (result.IsError) {
jMessageError(result.Message, $click, false, true);
} else {
jMessageOK(result.Message + "<br><br>Picking new item...", $click, false, false);
setTimeout('PaperSurveyBadEmailCleanUp._pickNewItem()', 3000);
}
}
});
}
}
答案 0 :(得分:1)
菲尔·哈克(Phil Haack)发表了一篇很好的文章,他描述了使用“路线调试器”工具,这个工具在像你这样的场景中很有用{链接http://haacked.com/archive/2012/07/25/finding-bad-controllers.aspx
答案 1 :(得分:0)
我已经在ajax post操作上取消了NoCaching属性,它似乎有效。我从昨天起没有收到任何错误。现在我需要重新考虑一下NoCaching属性。