| 

.NET C# Java Javascript Exception

2
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
<td><%: Html.TextBoxFor(m => m.Latitude, Convert.ToString(Model.Latitude, CultureInfo.InvariantCulture)) %>
und der Versuch mit Englisch
<td><%: Html.TextBoxFor(m => m.Latitude, Convert.ToString(Model.Latitude, CultureInfo.GetCultureInfo("en-EN")))%>
bringt keinen Erfolg

Gibt es denn eine Lösung um nur dies MVC Textfeld auf EN zuschalten, damit es richtig angezeigt wird?
Oder natürlich jede andere Lösung
News:
02.03.2011
Terppe 141 5
4 Antworten
1
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.

Die Konvertierung selbst sollte mit

Latitude.ToString(CultureInfo.InvariantCulture)

problemlos funktionieren.
02.03.2011
Daniel Kuppitz 596 6
1
Dann halt noch ein letzter Versuch.

Vollständiges Beispielprojekt: Zum Download
04.03.2011
Daniel Kuppitz 596 6
Sauberes MVC3-Beispiel
Habe alles verstanden. Vielen Dank. Werde es noch einmal mit suberer Anwendung mit erweiterter Funktionalität versuchen
Terppe 04.03.2011
habe es endlich eingebaut. Schon ordentlicher Aufwand um im Edit-View einen Punkt statt eines Kommas anzuzeigen. Vielen Dank
Terppe 07.03.2011
0
Diesen Weg habe ich auch probiert
Im Controller:
ViewData["latiConv"] = tbl87Geographic.Latitude.ToString(CultureInfo.InvariantCulture);

Im View .ascx
<%: Html.TextBoxFor(m => m.Latitude, ViewData["latiConv"])%>

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
<%: Html.TextBox(Convert.ToString(Model.Latitude), ViewData["latiConv"])%>
zeigt den Wert richtig mit Punkt an, aber der Wert wird nicht abgespeichert
03.03.2011
Terppe 141 5
0
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();

return RedirectToAction("index");
}
03.03.2011
Daniel Kuppitz 596 6
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
Terppe 04.03.2011

Stelle deine Mvc-Frage jetzt!