MVC, HTML.RenderAction – Erreur: la Durée doit être un nombre positif

Sur mon site, je veux que l'utilisateur ait la possibilité de se connecter/déconnecter à partir de n'importe quelle page. Lorsque l'utilisateur de sélectionner la connexion bouton, une boîte de dialogue modale sera présente à l'utilisateur pour lui d'entrer dans ses lettres de créance.

Depuis de connexion sera sur chaque page, j'ai pensé que je voudrais créer une vue partielle de la connexion et l'ajouter à la page de mise en page. Mais quand j'ai fait ce que j'ai obtenu l'erreur suivante: Détails de l'Exception: System.InvalidOperationException: la Durée doit être un nombre positif.

Il y a d'autres façons de contourner ce qui ne serait pas à l'aide de vues partielles, mais je crois que cela devrait fonctionner.

Donc pour le tester, j'ai décidé de faire tout simple avec le code suivant:

Créé une page de mise en page avec le code suivant

@{Html.RenderAction("_Login", "Account");}

Dans le AccountController:

public ActionResult _Login()
{
    return PartialView("_Login");
}

Vue Partielle _Login

<a id="signin">Login</a>

Mais quand je lance cette version simple de ce que j'obtiens toujours cette erreur:
Détails De L'Exception: System.InvalidOperationException: la Durée doit être un nombre positif.

Source d'erreur points à "@{Html.RenderAction("_Login", "Compte");}"

Il y a quelques conversations sur le web qui sont similaires à mon problème, qui l'identifie comme un bug avec MVC (voir les liens ci-dessous). Mais les liens se rapportent à la mise en Cache, et je ne vais pas faire toute la mise en cache.

OuputCache Profil de Cache ne fonctionne pas pour les enfant d'actions
http://aspnet.codeplex.com/workitem/7923

Asp.Net MVC 3 Partielle de la Page mise en Cache de Sortie de ne Pas Honorer les Paramètres de configuration
Asp.Net MVC 3 Partielle de la Page mise en Cache de Sortie de ne Pas Honorer les Paramètres de configuration

La mise en cache ChildActions à l'aide de profils de cache ne fonctionne pas?
La mise en cache ChildActions à l'aide de profils de cache ne fonctionne pas?

Je ne sais pas si cela fait une différence, mais je vais aller de l'avant et de l'ajouter ici. Je suis en utilisant MVC 3 avec un Rasoir.


Mise à jour
La Trace De Pile D'

[InvalidOperationException: Duration must be a positive number.]
System.Web.Mvc.OutputCacheAttribute.ValidateChildActionConfiguration() +624394
System.Web.Mvc.OutputCacheAttribute.OnActionExecuting(ActionExecutingContext filterContext) +127
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +72
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +784922
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +784976
System.Web.Mvc.Controller.ExecuteCore() +159
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
System.Web.Mvc.<>c__DisplayClass4.<Wrap>b__3() +15
System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Func`1 func) +41
System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +1363
[HttpException (0x80004005): Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.]
System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +2419
System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) +275
System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) +94
System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter) +838
System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues) +56
ASP._Page_Views_Shared_SiteLayout_cshtml.Execute() in c:\Projects\prj Projects\prj\Source\Presentation\prj.PublicWebSite\Views\Shared\SiteLayout.cshtml:80
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +280
System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +104
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +173
System.Web.WebPages.WebPageBase.Write(HelperResult result) +89
System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body) +234
System.Web.WebPages.WebPageBase.PopContext() +234
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +384
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +33
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +784900
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +784900
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +784976
System.Web.Mvc.Controller.ExecuteCore() +159
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +371

Mise à jour
Quand je Pause dans le Code, les erreurs à @{Html.RenderAction("_Login", "Compte");}, avec l'exception suivante. L'exception interne

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.
at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride)
at System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage)
at System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm)
at System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter)
at System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues)
at ASP._Page_Views_Shared_SiteLayout_cshtml.Execute() in c:\Projects\prj Projects\prj\Source\Presentation\prj.PublicWebSite\Views\Shared\SiteLayout.cshtml:line 80
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.WebPages.WebPageBase.Write(HelperResult result)
at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body)
at System.Web.WebPages.WebPageBase.PopContext()
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)

MVC, HTML.RenderAction – Erreur: la Durée doit être un nombre positif


Répondre
Grâce Darin Dimitrov

Venir pour le savoir, mon AccountController avait l'attribut suivant

[Système.Web.Mvc.OutputCache(NoStore =true, Durée = 0, VaryByParam = "*")].

Je ne crois pas que cela devrait l'origine d'un problème, mais quand je l'ai supprimé l'attribut tout a fonctionné.

BarDev

Hum, c'est bizarre. En lisant votre question, je suis prêt à parier 5 dollars que vous avez activé la mise en cache en quelque sorte. Essayez de renommer l'action, contrôleur. Assurez-vous que l'action que vous appelez n'est pas décoré de la [OutputCache] attribut. Essayez de faire cela dans un nouveau projet que vous commencez à partir de zéro. Je suis sûr que vous serez en mesure de le réduire.
Quelle est la trace de la pile?
dans votre exception stacktrace, nous pouvons voir OutputCacheAttribute. Si vous possédez m'5 dollars 🙂
Je vais créer un nouveau projet et de voir si je peux reproduire le problème.
Darin Dimitrov, vous êtes commpletely correcte. Merci pour l'aide. Comment au sujet de la prochaine fois que vous êtes à denver, je vais vous acheter une boisson. Permettez-moi de poser une autre question. Dans mon AccountController j'ai le texte suivant pour la classe [Système.Web.Mvc.OutputCache(NoStore = true, Durée = 0, VaryByParam = "*")]. Je ne sais pas pourquoi je l'ai ajouté. Même si je n'ai pas de mise en cache enbaled, n'ai-je besoin? Merci encore.

OriginalL'auteur Mike Barlow - BarDev | 2011-02-14