d'une erreur de virgule dans mvc3 - la valeur n'est pas valide pour le champ
Que je suis [mise en route avec ASP.NET MVC 3][1]. Et je ne peux pas ajouter/modifier la valeur des Prix = 9.99 ou 9,99. Il a dit: "La valeur" 9.99 " n'est pas valide pour le Prix." et "Le Prix doit être un nombre."
Comment résoudre ce problème?
Modèle:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
public class MovieDbContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
Contrôleur:
public class MovieController : Controller
{
private MovieDbContext db = new MovieDbContext();
//
//GET: /Movie/
public ViewResult Index()
{
var movie = from m in db.Movies
where m.ReleaseDate > new DateTime(1984, 6, 1)
select m;
return View(movie.ToList());
}
//
//GET: /Movie/Details/5
public ViewResult Details(int id)
{
Movie movie = db.Movies.Find(id);
return View(movie);
}
//
//GET: /Movie/Create
public ActionResult Create()
{
return View();
}
//
//POST: /Movie/Create
[HttpPost]
public ActionResult Create(Movie movie)
{
if (ModelState.IsValid)
{
db.Movies.Add(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
//
//GET: /Movie/Edit/5
public ActionResult Edit(int id)
{
Movie movie = db.Movies.Find(id);
return View(movie);
}
//
//POST: /Movie/Edit/5
[HttpPost]
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
//
//GET: /Movie/Delete/5
public ActionResult Delete(int id)
{
Movie movie = db.Movies.Find(id);
return View(movie);
}
//
//POST: /Movie/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
Movie movie = db.Movies.Find(id);
db.Movies.Remove(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
Vue:
@model MvcMovies.Models.Movie
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Movie</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ReleaseDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ReleaseDate)
@Html.ValidationMessageFor(model => model.ReleaseDate)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Genre)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Genre)
@Html.ValidationMessageFor(model => model.Genre)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
public DbSet<Movie> Movies { get; set; }
}
- Jetez un oeil à cette question: stackoverflow.com/questions/5199835/.... Il semble que votre problème de validation sont spécifiques à une culture.
- Ce que la culture est l'ordinateur sur lequel vous utilisez le site pour? L'utilisation de la culture de la virgule, ou la virgule pour les décimales?
Vous devez vous connecter pour publier un commentaire.
Je viens de tombé sur ce bout de 2 ans. J'ai pensé ASP.NET MVC 5, il avait résolu ce problème mais on dirait que ce n'est pas le cas. Alors, voici comment résoudre le problème...
Créer une classe appelée
DecimalModelBinder
comme suit et l'ajouter à la racine de votre projet, par exemple:À l'intérieur de
Global.asax.cs,
en faire usage dansApplication_Start()
comme ceci:Vous êtes l'un des non-clients anglais, MS n'a pas prévue. Vous aurez besoin de mettre des efforts supplémentaires pour que votre version exécuter. J'ai eu un problème similaire, me refuse à la fois "9,99" et "9.99" que des numéros valides. Il semble qu'une fois la validation côté serveur a échoué, et une fois la validation côté client, causant pas de numéro pour être accepté.
De sorte que vous avez à faire la validation en harmonie.
Comme suggéré dans les commentaires, regardez
http://msdn.microsoft.com/en-us/library/gg674880(SV.98).aspx
et
http://haacked.com/archive/2010/05/10/globalizing-mvc-validation.aspx
et
MVC 3 jQuery Validation/la mondialisation de nombre/champ décimal
ou - si vous comprenez l'allemand (ou il suffit de regarder les exemples de code)
http://www.andreas-reiff.de/2012/06/probleme-mit-mvcmovies-beispiel-validierung-des-preises-mit-dezimalstellen-schlagt-fehl/
BTW, même problème existe pour la Musique et de Film exemple des tutoriels.
J'ai rencontré ce problème lors du développement d'une application web pour un public anglais, sur un Pc, dans Les pays-bas.
Un modèle de propriété de type double, a généré cette validation côté serveur erreur:
Sur un point d'arrêt, j'ai vu de ces valeurs dans le Immédiate Fenêtre:
Comme une solution (ou peut-être un travail autour de), vous pouvez spécifier les paramètres de globalisation dans le web.fichier de configuration.
Bien sûr, cela signifie que vous force à vos utilisateurs d'entrer des nombres en anglais mise en forme, mais c'est très bien, dans mon cas.
J'ai résolu ce problème en situation de handicap jquery pour le prix et la seulement de valider sur le côté serveur pour une entrée. J'ai trouvé la réponse ici:
ASP .NET MVC Désactiver la Validation Côté Client à Chaque Niveau de Champ
J'ai adapté le code de Leniel Macaferi un peu de sorte que vous pouvez l'utiliser pour n'importe quel type:
J'ai essayé @Leniel Macaferi mais il ne fonctionne pas pour moi.
ModelState.IsValid n'accepte pas les numéros mis en forme que 7.000,00
Le problème a commencé quand j'ai changé le type de propriété dans:
à
J'ai aussi essayé d'inclure la mondialisation sur le web.config que j'avais oublié
La seule solution qui a fonctionné a été de changer la propriété de décimales seulement:
et a également changé la colonne de la table pour ne PAS accepter les valeurs null
Espère que cela aide quelqu'un.
En 2019, ce problème n'est toujours pas résolu. À l'aide d'ASP de Base 2.1, mon INTERFACE est en français (séparateur décimal= ',') et je ne pouvais pas obtenir la validation de travailler à tout moment, j'ai eu un nombre décimal.
J'ai trouvé une solution de contournement, pas idéal si: j'ai créé un français CultureInfo mais j'ai changé le séparateur décimal à être la même que dans l'Invariant de la Culture : '.'.
Ce fait, le truc, mes nombres décimaux sont maintenant affichés à l'américaine (mais je suis ok avec elle) et la validation des travaux.
Vous pouvez ajouter:
À
Global.asax
(testé sur MVC 5.1). Il fonctionne sans changer UICulture pour moi.Juste un commentaire sur ce lien pour le script: