Sto riscontrando un problema in cui gli utenti sui dispositivi mobili riscontrano un errore in MVC che non si verifica durante la visualizzazione del sito su un normale desktop. Posso costantemente riprodurre l'errore utilizzando gli strumenti di sviluppo di Chrome e applicare qualsiasi altra UA oltre a quella predefinita.Cause agente utente MVC DisplayFor ArgumentException: caratteri non validi nel percorso
L'eccezione sottostante gettato è: ArgumentException: Illegal characters in path. at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) at System.IO.Path.GetExtension(String path) at System.Web.WebPages.DefaultDisplayMode.TransformPath(String virtualPath, String suffix) at System.Web.WebPages.DefaultDisplayMode.GetDisplayInfo(HttpContextBase httpContext, String virtualPath, Func'2 virtualPathExists) at System.Web.WebPages.DisplayModeProvider.GetDisplayInfoForVirtualPath(String virtualPath, HttpContextBase httpContext, Func'2 virtualPathExists, IDisplayMode currentDisplayMode, Boolean requireConsistentDisplayMode) at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List'1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) at System.Web.Mvc.VirtualPathProviderViewEngine.FindPartialView(ControllerContext controllerContext, String partialViewName, Boolean useCache) at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClass2.<FindPartialView>b__1(IViewEngine e) at System.Web.Mvc.ViewEngineCollection.Find(Func'2 lookup, Boolean trackSearchedPaths) at System.Web.Mvc.ViewEngineCollection.FindPartialView(ControllerContext controllerContext, String partialViewName) at System.Web.Mvc.Html.TemplateHelpers.ExecuteTemplate(HtmlHelper html, ViewDataDictionary viewData, String templateName, DataBoundControlMode mode, GetViewNamesDelegate getViewNames, GetDefaultActionsDelegate getDefaultActions) at System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData, ExecuteTemplateDelegate executeTemplate) at System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData) at System.Web.Mvc.Html.TemplateHelpers.TemplateFor[TContainer,TValue](HtmlHelper'1 html, Expression'1 expression, String templateName, String htmlFieldName, DataBoundControlMode mode, Object additionalViewData, TemplateHelperDelegate templateHelper) at System.Web.Mvc.Html.TemplateHelpers.TemplateFor[TContainer,TValue](HtmlHelper'1 html, Expression'1 expression, String templateName, String htmlFieldName, DataBoundControlMode mode, Object additionalViewData) at System.Web.Mvc.Html.DisplayExtensions.DisplayFor[TModel,TValue](HtmlHelper'1 html, Expression'1 expression)
Utilizzando violinista, l'unica differenza nelle richieste quando si confrontano un successo per una richiesta non riuscita è l'User-Agent (e il busting della cache apposta da jQuery come parte del parametri della stringa di query).
Perché è solo la modifica della UA che causa questa eccezione e come posso evitare questo problema senza scrivere un lavoro specifico nel sistema per ogni posto che è e potrebbe accadere?
Hai trovato una soluzione a questo? –
@RomanMik - In realtà ho trovato lo stesso lavoro di CSJ al di sotto del quale evitare i blocchi di rendimento nei miei modelli di vista. Dopo aver modificato il codice per materializzare l'elenco anziché utilizzare il rendimento, il problema è stato risolto. Non riesco ancora a comprendere appieno perché ciò avvenga in .NET con determinati programmi utente, ma almeno c'è un modo standard per aggirarlo. – SignalRichard
Ho trovato una soluzione diversa correlata a ASP.NET DisplayModeProvider che ho condiviso nell'articolo SO correlato http://stackoverflow.com/questions/33694842/illegal-characters-in-path-depending-on-user-agent/40229384#40229384 –