2015-01-22 4 views
2

У меня есть эта странная проблема.
В контроллере:Формат Double.ToString() на сервере IIS отличается от разработки

Model ses = new Model(); 
ses.Latitudine = ses.Sesizare.Locatie.HotSpotLocatie.First().HotSpotLatD; 
ses.Longitudine= ses.Sesizare.Locatie.HotSpotLocatie.First().HotSpotLatD; 

В модели:

public class Model 
{ 
    public double Latitudine {get; set;} 
    public double Longitudine {get; set;} 
} 

В Вид:

<h4><span class="glyphicon glyphicon-globe"></span> <a style="color:white" target='_blank' href='@("http://maps.google.com/maps?q=" + Model.Latitudine + "," + Model.Longitudine)'>Locatia:</a> </h4> 

Теперь в Visual Studio отладки вид визуализируется как:

<h4><span class="glyphicon glyphicon-globe"></span> <a style="color:white" target="_blank" href="http://maps.google.com/maps?q=45.65933,25.561595">Locatia:</a> </h4> 

http://maps.google.com/maps?q=45.65933,25.561595 (ссылка полезная)

Однако после публикации я получаю:

<h4><span class="glyphicon glyphicon-globe"></span> <a style="color:white" target="_blank" href="http://maps.google.com/maps?q=45,65933,25,561595">Locatia:</a> </h4> 

http://maps.google.com/maps?q=45,65933,25,561595 (ссылка непригодные)

Разработка и производство на одной машине.

В другом контроллере у меня есть:

Latitude = t.LocatieGPS.Latitude.ToString(); 

и здесь результат использует DOT как производства, так и развития.

Это производственное WebConfig:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    </configSections> 
    <!-- 
    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367. 

    The following attributes can be set on the <httpRuntime> tag. 
     <system.Web> 
     <httpRuntime targetFramework="4.5.1" /> 
     </system.Web> 
    --> 
    <system.web> 
    <compilation targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <connectionStrings> 
    .... 
    </connectionStrings> 
    <appSettings> 
    <add key="owin:AppStartup" value="GestiuneServiceWeb.Startup,GestiuneServiceWeb" /> 
    <add key="webpages:Version" value="3.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
</configuration> 
+4

Вы уверены, что используете одни и те же настройки культуры? –

+0

Что вы подразумеваете под этим? –

+0

Показать свой Web.Config – haim770

ответ

5

Это вызвано культурой машины. Вероятно, вы не хотите изменять культуру для всего своего приложения, поэтому просто укажите, как вы хотите отформатировать десятичные знаки.

InvariantCulture использует точку в качестве десятичного разделителя:

@("http://maps.google.com/maps?q=" + Model.Latitudine.ToString(CultureInfo.InvariantCulture) + "," + Model.Longitudine.ToString(CultureInfo.InvariantCulture)) 
+0

Я хочу изменить культуру для всего приложения. И я хочу, чтобы во время разработки и производства это было одинаково. Проблема в том, что Decimal.ToString() отображает ** запятые ** только на этом конкретном контроллере, в другом контроллере он отображает ** период **.В разработке он отображает ** период ** на обоих контроллерах ... –

+0

Затем вам нужно выяснить различия между этими контроллерами и представлениями. – CodeCaster

2

Это, вероятно, связано с культурой, которую вы используете в IIS. Для того, чтобы изменить это в вашем случае, без изменения культуры в другом месте, вы могли бы, возможно, форматировать ссылку следующим образом:

href='@("http://maps.google.com/maps?q=" + 
    Model.Latitudine.ToString(CultureInfo.InvariantCulture) + "," + 
    Model.LongitudineToString(CultureInfo.InvariantCulture))' 

Это преобразует число в строку и вывести его с настройками «InvariantCulture», который будет использовать точку вместо запятой.

+0

Хорошо, но я хочу, чтобы культура была такой же. и использовать ** dot ** для decimal –

+0

«период» означает то же самое, что «точка» в этом случае, но я все равно изменю его в своем ответе, так как я предполагаю, что более SO читатели будут более знакомы с термином «точка»;). Что касается изменения в культуре, это будет относиться только к конкретной строке, которую вы выводите. Будет ли это проблемой? – Kjartan

+0

Да. Проблема возникает только в этом контроллере. У меня есть еще один контроллер, который возвращает JSON, а метод .ToString() этого контроллера делает удвоение, используя точку или период, вместо запятой. –

Смежные вопросы