J'ai quelques entrées cachées sur une vue ASP.NET MVC. Leurs valeurs contiennent des objets de type La solution la plus belle serait si je pouvais spécifier une culture dans le Je ne peux pas aussi simplement définir le Ainsi, est-il un moyen de changer temporairement la culture actuelle, juste avant de faire un ou y a-t-il une autre meilleure façon de faire cela? Ce qui est considéré comme la meilleure pratique concernant cela? P> p> double code>. Je veux qu'ils soient rendus avec le
invariantCulture code> car ils sont utilisés pour être nourris à une API (Google Maps) sur le client. Comme il est maintenant, ils sont rendus avec une virgule (,) comme séparateur décimal, tandis que l'API attend un point (.) Comme séparateur décimal.
DisplayFormat code> Attribut d'annotation de données sur la propriété sur le modèle, mais je ne pense pas que ce soit possible: p>
CurrentCulture Code> à
invariantCulture code> dans mon
Application_start code>, car il existe d'autres valeurs sur l'écran qui doivent être dans la culture d'utilisateur appropriée. P>
html.hiddacfor (modèle => modèle.latitude) code> pour cette propriété spécifique, et Puis réinitialisez-le ensuite? p>
3 Réponses :
Un moyen d'atteindre cela serait d'écrire un modèle d'éditeur personnalisé puis sur votre Modèle: p> et enfin à votre vue: p> ou si vous vouliez que tous les doubles dans votre application soient comportant Ceci utilise les ~ / vues / partagé / editorTorplates / invariartdouble.cshtml code>:
~ / vues / shared / editortempleates / double.cshtml code> sans aucun
uihint code>. p> p>
Merci, mais si j'ai aussi un [Hiddeninput (displayvalue = false)] code> attribut sur la propriété?
@fretje, puis remplacer hiddeninput.cshtml code>. Brad Wilson couvre les modèles par défaut de ce blog post: bradwilson.typepad.com/blog/2009/10/...
Je l'ai fait un peu différent ... voir Ma réponse .
J'ai fini par créer un modèle (position.chtml) pour un sous-objet spécifique Position code> dans mon modèle comme celui-ci:
@model Models.Position
@{
var latitude = string.Format(System.Globalization.CultureInfo.InvariantCulture,
"{0:G}", Model.Latitude);
var longitude = string.Format(System.Globalization.CultureInfo.InvariantCulture,
"{0:G}", Model.Longitude);
}
@Html.Hidden("Latitude", latitude)
@Html.Hidden("Longitude", longitude)
<p />
<div id="mapCanvas"></div>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/maps.js")"></script>
<script type="text/javascript">
$(function () {
attachMap($('#mapCanvas'), $('#Position_Latitude'), $('#Position_Longitude'), true);
})
</script>
Vieux post mais je vais mettre mes deux cents quand même ... Tout d'abord vos scripts ~ / scripts / map.js code> et le script Google Maps seront inclus chaque fois que cette vue partielle sera rendue. Pourrait être mauvais si vous montrez plus d'une carte dans une vue donnée. De plus, si vous avez plus d'une carte, vous pouvez personnaliser le
MapCanvas CODE> ID, il est donc unique dans la page. Troisièmement, vous pouvez utiliser une autre vue partielle appelée par Modèle Editeur et Affichage et recevoir des informations sur les paramètres Boolean code> Boolean.
public static MvcHtmlString HiddenForInvariant<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) { var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); var id = string.Format("{0}", metadata.PropertyName); var compile = expression.Compile(); string value = Convert.ToString(compile(htmlHelper.ViewData.Model), CultureInfo.InvariantCulture); var hidden = htmlHelper.Hidden(id, value).ToHtmlString(); return new MvcHtmlString(hidden); }