In der Datenbank befindet sich ein Floatfeld 123,3456789 welches im Textfeld als 123.3456789 angezeigt werden soll. Wenn das Programm im de-DE oder fr-FR Culture läuft erhalte ich immer 123,3456789 also false Wenn ich aber im en-EN Culture laufen lasse, erhalte ich 123.3456789 also ok
Aber im de-De Modus muß es funktionieren Der Versuch auf InvariantCulture zu schalten, also ohne eine Culture "" bringt keinen Erfolg
Lass den Controller die Konvertierung übernehmen und definiere das entsprechende Feld in Deinem View-Model als String. Andernfalls bekommst Du spätestens beim Abschicken des Formulars wieder Probleme, da der Modelbinder nur in einer Culture, nämlich der aktuellen, arbeiten wird.
Im Controller wird der Wert mit (Punkt) angezeigt, aber im View in der TextBox wieder mit (Komma). Da m.Latitude ein Double ist, kümmert er sich nicht um den String mit Punkt. Sobald ich auf Culture en schalte sind alle verschiedenen Wege erolgreich, es wird der Punkt angezeigt. Der Versuch mit Veränderung des Doubles
So war es auch nicht gemeint. Trenne Dein ViewModel strikt vom Datenmodell:
DataModel
public class PlaceOnEarth { public int ID { get; set; } public string Location { get; set; } public double Latitude { get; set; } public double Longitude { get; set; } }
ViewModel
public class PlaceOnEarthViewModel { static readonly CultureInfo ConversionCulture = CultureInfo.InvariantCulture;
public int ID { get; set; } public string Location { get; set; } public string Latitude { get; set; } public string Longitude { get; set; }
public static PlaceOnEarthViewModel FromDataModel(PlaceOnEarth place) { return new PlaceOnEarthViewModel { ID = place.ID, Location = place.Location, Latitude = place.Latitude.ToString(ConversionCulture), Longitude = place.Longitude.ToString(ConversionCulture) }; }
public PlaceOnEarth ToDataModel() { return new PlaceOnEarth { ID = this.ID, Location = this.Location, Latitude = double.Parse(this.Latitude, ConversionCulture), Longitude = double.Parse(this.Longitude, ConversionCulture) }; } }
Controller (stark vereinfacht)
public ActionResult Edit(int id) { var place = _repository.Places.FirstOrDefault(p => p.ID == id); var model = PlaceOnEarthViewModel.FromDataModel(place);
return View(model); }
[HttpPost] public ActionResult Create(PlaceOnEarthViewModel model) { _repository.Places.AddObject(model.ToDataModel()); _repository.SaveChanges();
Habe gedacht, daß ich deine Lösung verstanden habe und eingebaut.
var place = tbl87GeographicsRepository.Tbl87Geographics.FirstOrDefault(p => p.Geog raphicID == geographicID); var viewModel = PlaceOnEarthViewModel.FromDataModel(place); Aber leider kommt Fehler Fehler 1 Die beste Übereinstimmung für die überladene Atis.WebUI.Models.PlaceOnEarthViewModel.FromDataModel(Atis.Domain.Models.PlaceOnEarth)-Methode hat einige ungültige Argumente. D:\!Aktuell_Atis\MVC2\Atis_Version_010\Atis_V010_D20110303_B0078\Atis.WebUI\Controllers\Tbl87GeographicsController.cs
Habe alles verstanden. Vielen Dank. Werde es noch einmal mit suberer Anwendung mit erweiterter Funktionalität versuchen