2013-04-17 14 views
8

Zajmuję się tworzeniem portalu asp.net mvc do zarządzania współrzędnymi GPS za pomocą localDB. Mój model to:Formularz ASP.NET MVC i podwójne pola

public class GpsCoordinateViewModel 
{ 
    double Latitute { get; set; } 
    double Longitude { get; set; } 
} 

automatycznie wygenerowany adn pokrewne Zobacz, aby utworzyć nowy GpsCoordinate jest:

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 
@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

<fieldset> 
    <legend>GpsCoordinateViewModel</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Latitude) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Latitude) 
     @Html.ValidationMessageFor(model => model.Latitude) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Longitude) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Longitude) 
     @Html.ValidationMessageFor(model => model.Longitude) 
    </div> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 

}

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

problemem jest to, że kiedy wstawić jako Latitude: 41.213321 i Długość geograficzna: 12.123432 (np.), Z wykorzystaniem lokalnych wartości breakpoin to: Szerokość geograficzna: 41213321 Długość geograficzna: 12123432. Potrzebuję użyć podwójnego ze względu na dokładność lokalizacji, ale jak?

Czytałem również tego pytania: How should I use EditorFor() in MVC for a currency/money type?

MVC3 - 3 decimal places on type double with leading zero

ale rozwiązania nie działa dla mnie. Wszelkie sugestie?

EDIT: Moja webconfig jest:

<system.web> 
<httpHandlers> 
    <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers> 

<!-- 
    Enabling request validation in view pages would cause validation to occur 
    after the input has already been processed by the controller. By default 
    MVC performs request validation before a controller processes the input. 
    To change this behavior apply the ValidateInputAttribute to a 
    controller or action. 
--> 
<pages 
    validateRequest="false" 
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=number"> 
    <controls> 
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=number" namespace="System.Web.Mvc" tagPrefix="mvc" /> 
    </controls> 
</pages> 
<globalization culture="en-US" uiCulture="en-US" /> 

+0

Czy mówisz, że jeśli wprowadzasz wartości z kropką dziesiętną, wartości są następnie odbierane jako liczba całkowita w twoim łączniku? –

+0

Hi von v. tak, dokładnie – antedesk

+0

To interesujące. Nawet bez formatowania dataannotation powinno działać. Nie sądzę nawet, że informacje o kulturze mają z tym coś wspólnego, ponieważ w ogóle nie masz separatora! Hmm ... –

Odpowiedz

5

mogą być spowodowane przez CultureInfo, niektóre użycie kultura , zamiast . dla separatora dziesiętnego. spróbuj ustawić następujące w pliku web.config,

<system.web> 
    <globalization culture="en-US" uiCulture="en-US" /> 
</system.web> 

nadzieję, że to pomaga

+0

działa, ale nie tak dobrze. Pola formularza pozwalają mi wstawić krótki numer (tylko 3 cyfry, potem), a kiedy utworzę nowy obiekt DbGeography (Zobacz System.Data.Spatial), mam ogólny wyjątek. – antedesk

+0

Czy używasz "en-US"? jeśli używasz, czy 41.213321 nie wiąże się poprawnie? – shakib

+0

Skopiuj i wklej w moim znaczniku system.web. Jeśli użyję tego, (np .: 41, 233321), pokaże mi to: "Pole Szerokość musi być liczbą". Jeśli używam 41.213321, punkt przerwania pokazuje mi 41213321.00. W obu przypadkach aplikacja przechodzi do trybu catch i nie wstawia nowego GpsCoordinate.teraz mogę edytować moje pytanie, aby pokazać wam moje antedesk

1

Używaj Decimal Zamiast podwójnego jako typ danych, a to może pomóc.

+0

nie działa ... – antedesk

1

Cóż, należy użyć ciągu znaków jako DataType i przeanalizować go jako wartość dziesiętną później od kontrolera.

+0

to brudne rozwiązanie :) – antedesk