TempData null dans asp.net de base
Je suis en train d'utiliser TempData dans asp.net core Cependant j'obtiens une valeur null sur la méthode get de TempData. Quelqu'un peut s'il vous plaît laissez-moi savoir comment je peux utiliser TempData dans asp.net core
Ci-dessous sont les choses que j', ont ajouté que par la recherche.
Projet.fichier json
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Routing": "1.0.1",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.1.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Design": "1.1.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0",
"DataBase": "1.0.0-*",
"UnitOfWork": "1.0.0-*",
"ViewModel": "1.0.0-*",
"Common": "1.0.0-*",
"System.IdentityModel.Tokens.Jwt": "5.0.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.AspNetCore.Session": "1.1.0",
"Microsoft.Extensions.Caching.Memory": "1.1.0"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final",
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
commencer.cs fichier
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddSession();
//Add framework services.
services.AddMvc();
services.AddTransient<IMarketUOW, MarketUow>();
services.AddTransient<ICategoryUow, CategoryUow>();
services.AddTransient<IUserProfileUow, UserProfileUow>();
services.AddTransient<IItemUow, ItemUow>();
services.AddTransient(typeof(IGenericRepository<>), typeof(GenericRepository<>));
var connection = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<EmakitiContext>(options => options.UseSqlServer(connection));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Ici est la mise en œuvre de tempdata.Lorsque cette méthode est appelée, je peux voir la valeur dans TempData.
[HttpGet("{pageNumber}")]
public GenericResponseObject<List<MarketViewModel>> GetMarketList(int pageNumber)
{
TempData["Currentpage"] = pageNumber;
TempData.Keep("Currentpage");
GenericResponseObject<List<MarketViewModel>> genericResponseObject = new GenericResponseObject<List<MarketViewModel>>();
genericResponseObject.IsSuccess = false;
genericResponseObject.Message = ConstaintStingValue.Tag_ConnectionFailed;
try
{
var marketItem = _iMarketUow.GetMarketList(pageNumber);
genericResponseObject.Data = marketItem.Item1;
var totalPages = (int)Math.Ceiling((decimal)marketItem.Item2 / (decimal)10);
genericResponseObject.TotalPage = totalPages;
genericResponseObject.IsSuccess = true;
genericResponseObject.Message = ConstaintStingValue.Tag_SuccessMessageRecord;
genericResponseObject.Message = ConstaintStingValue.Tag_ConnectionSuccess;
}
catch (Exception exception)
{
genericResponseObject.IsSuccess = false;
genericResponseObject.Message = exception.Message;
genericResponseObject.ErrorCode = exception.HResult;
genericResponseObject.ExceptionErrorMessage = exception.StackTrace;
}
return genericResponseObject;
}
Mais la méthode ci-dessous a la valeur null dans la temp de données.
[HttpPost]
public GenericResponseObject<List<MarketViewModel>> AddUpdateMarket([FromBody] MarketViewModel marketViewModel)
{
GenericResponseObject<List<MarketViewModel>> genericResponseObject = new GenericResponseObject<List<MarketViewModel>>();
genericResponseObject.IsSuccess = false;
genericResponseObject.Message = ConstaintStingValue.Tag_ConnectionFailed;
if (marketViewModel!= null && ModelState.IsValid)
{
try
{
_iMarketUow.AddUpdateMarketList(marketViewModel);
genericResponseObject = GetMarketList(Convert.ToInt16(TempData.Peek("Currentpage")));
}
catch (Exception exception)
{
genericResponseObject.IsSuccess = false;
genericResponseObject.Message = exception.Message;
genericResponseObject.ErrorCode = exception.HResult;
genericResponseObject.ExceptionErrorMessage = exception.StackTrace;
}
}
else
{
genericResponseObject.Message = ConstaintStingValue.Tag_InputDataFormatNotMatch;
}
return genericResponseObject;
}
Ici est l'image de la session de débogage
J'ai eu le même problème et j'ai réalisé que c'était à cause de j'ai été en utilisant privé onglet du navigateur
Pour référence: docs.microsoft.com/en-us/aspnet/core/fundamentals/...
Pour référence: docs.microsoft.com/en-us/aspnet/core/fundamentals/...
OriginalL'auteur San Jaisy | 2017-01-19
Vous devez vous connecter pour publier un commentaire.
Après la Migration à l'ASP de Base 2.1 j'ai eu ce problème et après avoir travaillé pour un jour trouver la solution:
en Démarrage.Configurer()
app.UseCookiePolicy();
devrait l'être aprèsapp.UseMVC();
C'était aussi la raison pour laquelle la récupération des codes ne sont pas affichés lors de l'utilisation de ASP.NET de Base de l'Identité et vous avez 2 Facteur activé l'Authentification.
je vous Remercie pour cela! Ce problème est d'autant plus déroutant, parce que l'état de la session docs (docs.microsoft.com/en-us/aspnet/core/fundamentals/...) pour netcore 2.1 et 2.2 montrent
UseCookiePolicy()
être configuré avantUseMVC()
, ce qui est évidemment inexact.Merci!!!! M'a sauvé d'une journée de recherche, j'ai eu le même problème et juste le faire réparer.
rien de mal avec l'ordre. vérifier ma réponse ci-dessous.
OriginalL'auteur HamedH
Veuillez mettre à jour votre de tous les paquets de la même version
1.1.0
ajouter service de mise en cache. Voici les choses nécessaires pour l'utilisation deTempData
dansAsp.Net Core
Projet.json
Ici, c'est le Démarrage.cs fichier. - ConfigureServices méthode
Et Configurer la méthode.
Maintenant, essayez avec
TempData
, il va fonctionner.Et vous pouvez définir l'environnement avec ASPNETCORE_ENVIRONMENT=environnement de Développement variable.
PS
ASP.NET Core MVC
expose leTempData
propriété sur unController
.TempData
peut être utilisé pour stocker des données temporaires qui ne doit être disponible que pour une seule requête après la demande actuelle.Quand un objet dans un
TempDataDictionary
est lu, il sera marqué pour la suppression, à la fin de cette demande.La
Peek
etKeep
méthodes vous permettent de lire la valeur sans le marquer pour suppression. Dire qu'on se ramène à la première demande où la valeur a été enregistré àTempData
.Avec
Peek
vous obtenez la valeur sans le marquer pour suppression avec un seul appel.Avec
Keep
vous spécifiez une clé qui a été marqué pour suppression que vous souhaitez conserver. Récupération de l'objet et, plus tard, sur l'enregistrement de la suppression de 2 différents appels.Avez-vous lu tempdata valeur qu'elle en vue ?
Je suis en train d'utiliser dans le deuxième requête http.Première méthode de stocker la valeur de la tempdata et deuxième demande d'obtenir les données à partir de tempdata. Cependant, j'obtiens la valeur null pour une partie
ajouter votre projet à jour.json et de démarrage.cs.
Jetez un coup d'oeil. J'ai téléchargé le code complet
OriginalL'auteur Ahmar
Rien de mal avec le middleware commande, comme décrit sur officiel docs, qui est:
Mais lorsque nous utilisons l'application de la politique (UseCookiePolicy), seulement essentiel cookie qui sera envoyé au navigateur et les Cookies de Tempdata fournisseur de n'est pas indispensable d'où le problème. Nous avons donc à faire qu'il est essentiel, selon la documentation officielle:
L'ajout de ces lignes devrait résoudre votre problème sans réorganisation middleware.
OriginalL'auteur Nugroho Budi