Comment définir la culture pour la date de liaison dans Asp.Net Core?
J'ai un Asp.Net application de Base avec MVC. Je suis à la soumission d'un formulaire avec une date sur le formulaire.
Apparence de la forme (à peu près) comme ceci:
@model EditCustomerViewModel
<form asp-action="Edit">
<input asp-for="ServiceStartDate" class="form-control" type="date" />
<input type="submit" value="Update" class="btn btn-success" />
</form>
Contrôleur de l'action est:
[HttpPost]
public async Task<IActionResult> Edit(EditCustomerViewModel viewModel)
{
//do stuff
return RedirectToAction("Index");
}
Modèle de vue est:
public class EditCustomerViewModel
{
public Guid Id { get; set; }
[DataType(DataType.Date)]
public DateTime ServiceStartDate { get; set; }
[DataType(DataType.Date)]
public DateTime? ServiceEndDate { get; set; }
//etc.
}
Je suis dans le royaume-UNI, si les dates ne sont pas au format AMÉRICAIN: dd/MM/YYYY
. Donc par défaut je suis en soumettant 6/22/2017
.
Lors de la recherche sur le soumis modèle de vue du régulateur pendant le débogage, les dates sont nulles si elles ont été soumises au royaume-UNI, mais sont très bien si vous utilisez format AMÉRICAIN. c'est à dire 6/22/2017
me donne null
, mais 22/6/2017
est lié à la bonne date.
J'ai essayé d'ajouter ce point à Startup.cs
mais elle n'a fait aucune différence:
var supportedCultures = new[] { new CultureInfo("en-GB") };
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-GB"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-GB");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-GB");
CultureInfo.CurrentCulture = new CultureInfo("en-GB");
CultureInfo.CurrentUICulture = new CultureInfo("en-GB");
J'ai vérifié les en-têtes HTTP et je vais l'afficher en-tête correcte:
Accept-Language: en-GB,en
Ce que je fais mal? Comment puis-je savoir MVC, Base de liants pour lier les dates au royaume-UNI format?
p.s. Je suis sur VS2017 avec *.csproj fichier de projet, avec des objectifs de cadre .NetCoreApp 1.1
- Avez-vous déjà rencontré ces deux github.com/aspnet/Localization/issues/136, jerriepelser.com/blog/...
- Aussi
yyyy/MM/dd
toujours. si tout le reste échoue. - tous les la danse avec
CurrentCulture
etCurrentUiCulture
ne semble pas faire de différence sur les dates de liaison. Je pourrait aller dans le chemin d'accès de la seconde au format que vous mentionnez - ouais, obtenu tri - j'ai moi-même confus au premier abord, mais après unpeeling toutes les couches, il a travaillé.
- Pouvez-vous ajouter de la façon dont vous finalement obtenu ce travail comme une réponse. Je suis intéressé.
- Réponse ci-dessous est ce que j'ai utilisé. En Plus j'ai eu à régler la culture sur un js côté de l'app, c'était pour ajouter à la confusion.
- "les dates sont nulles si elles ont été soumises au royaume-UNI, mais sont très bien si vous utilisez format AMÉRICAIN. c'est à dire 6/22/2017 me donne nulle, mais 22/6/2017 est lié à la bonne date" - je suppose que vous avez obtenu de la part après "c'est à dire" mélangé.
Vous devez vous connecter pour publier un commentaire.
Un couple de choses. Je ne suis pas sûr que vous pouvez pousser un nouvel objet de paramètres dans le middleware comme ça (Vous pouvez probablement), mais la plupart du temps, j'ai vu qu'il est utilisé dans le ConfigureServices méthode comme suit :
Seconde. L'ordre de votre middleware est très important. S'assurer que votre appel à UseRequestLocalization qui se passe avant UseMvc. Enfait il devrait probablement être la première chose dans votre portefeuille, sauf si il y a une raison spécifique, il ne peut pas être.
Et enfin, pouvez-vous essayez de supprimer tous les fournisseurs de la canalisation (dont l'Un est un cookie fournisseur. Je ne peux pas imaginer pourquoi vous auriez ce cookie, mais nous allons juste essayer).
Dans votre configurer un appel de méthode claire sur le RequestCultureProviders liste. Ce qui devrait garantir qu'il n'y a rien d'autre là-bas pour définir une culture.
Plus d'infos : http://dotnetcoretutorials.com/2017/06/22/request-culture-asp-net-core/
dotnet app.dll
la date fonctionne très bien sur le POST, mais quand je lance l'application en tant que service systemd, le changement de format. Cette réponse a travaillé pour moi très bien, avecCultureInfo("pt-BR")
.Mise à jour de réponse pour le réseau core 2.0