Textbox rejecting ##,00 format
<p>I have a MVC project where I am displaying currency amounts in different formats based on the currency of the object.<br>
My project handles the ##.00 format just find, but I have some objects that are using Euros for example that need to be in the ##,00 format instead of ##.00.<br>
Then the page loads in read only mode both formats display correctly, but then the form is edited, it initially shows the currencies correctly, but if I click out of a Euro formatted amount, it drops the <em>","</em> out of the amount (for example 1000,00 changes to 100000).<br>
In the model, the fields are of DataType = Currency and are decimals. Also, if 1000,00 is tried to save, it is returned as invalid.</p>

<p><strong>How to I get the textbox to handle the both currency formats?</strong></p>

<p>This is my code</p>

<pre><code>@model Projections.Web.ViewModels.Projections.ProjectionFormView

@Html.HiddenFor(model =&gt; model.Number)
@Html.HiddenFor(model =&gt; model.Department)

@* -- Quarters -- *@
&lt;div class="edit-fields"&gt;
    &lt;div class="control-group"&gt;
        @Html.LabelFor(model =&gt; model.Q12017, new {@class = "control-label"})
        &lt;div class="controls"&gt;
            @Html.EditorFor(model =&gt; model.Q12017)
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="control-group"&gt;
        @Html.LabelFor(model =&gt; model.Q22017, new {@class = "control-label"})
        &lt;div class="controls"&gt;
            @Html.EditorFor(model =&gt; model.Q22017)
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="control-group"&gt;
        @Html.LabelFor(model =&gt; model.Q32017, new {@class = "control-label"})
        &lt;div class="controls"&gt;
            @Html.EditorFor(model =&gt; model.Q32017)
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="control-group"&gt;
        @Html.LabelFor(model =&gt; model.Q42017, new { @class = "control-label" })
        &lt;div class="controls"&gt;
            @Html.EditorFor(model =&gt; model.Q42017)
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="control-group"&gt;
        @Html.LabelFor(model =&gt; model.Q12018, new { @class = "control-label" })
        &lt;div class="controls"&gt;
            @Html.EditorFor(model =&gt; model.Q12018)
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre>

<p>Controller:</p>

<pre><code>    public ActionResult Edit(string number, string department)
    {
        // Get the project we're trying to edit a projection for.
        var projects = _db.Projects.FindBy(
            x =&gt; x.Number == number &amp;&amp;
                x.PMUsername == SessionWrapper.CurrentManager,
                null,
                "Projection").ToList();

        if (!projects.Any())
        {
            return Error(
                Notices.ProjectNotFoundTitle,
                string.Format(Notices.ProjectNotFound, number)
                );
        }

        var project = projects.SingleOrDefault(x =&gt; x.Department == department);
        var baseProject = projects.SingleOrDefault(x =&gt; x.Department == string.Empty);

        // Project doesn't exist, error time!
        if (project == null || baseProject == null)
        {
            return Error(
                Notices.DepartmentNotFoundTitle,
                string.Format(Notices.DepartmentNotFound, department, number)
            );
        }

        project.Projection = project.Projection ?? new Projection { Number = number, Department = department, Project = project };

        SetProjectCulture(project.ProjectCurrencyCode);
        var projection = Mapper.Map&lt;ProjectionFormView&gt;(project.Projection);
        projection.BaseProjectName = baseProject.Name;

        return View(projection);
    }

    private void SetProjectCulture(string currencyCode)
    {
        var uiHelper = DependencyResolver.Current.GetService&lt;IThreadUIHelper&gt;();

        if (!uiHelper.SetUICulture(currencyCode)) return;
        var notice = new Notification(string.Format(Notices.ProjectCurrencyNotice, currencyCode));
        NotificationHandler.AddNotification(notice);
    }
</code></pre>

<p>Model</p>

<pre><code>using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;

namespace Projections.Web.ViewModels.Projections
{
    public class Forecast : INotifyPropertyChanged
    {
        private decimal _q12017;
        private decimal _q22017;
        private decimal _q32017;
        private decimal _q42017;
        private decimal _q12018;

    [DataType(DataType.Currency)]
    public decimal Q12017
    {
        get { return _q12017; }
        set { _q12017 = value; ForecastChanged("Q12017"); }
    }

    [DataType(DataType.Currency)]
    public decimal Q22017
    {
        get { return _q22017; }
        set { _q22017 = value; ForecastChanged("Q22017"); }
    }

    [DataType(DataType.Currency)]
    public decimal Q32017
    {
        get { return _q32017; }
        set { _q32017 = value; ForecastChanged("Q32017"); }
    }

    [DataType(DataType.Currency)]
    public decimal Q42017
    {
        get { return _q42017; }
        set { _q42017 = value; ForecastChanged("Q42017"); }
    }

    [DataType(DataType.Currency)]
    public decimal Q12018
    {
        get { return _q12018; }
        set { _q12018 = value; ForecastChanged("Q12018"); }
    }

    public decimal Total
    {
        get
        {
            var quarters = GetType().GetProperties().Where(x =&gt; x.Name.StartsWith("Q")).ToList();
            return quarters.Sum(q =&gt; (decimal?)q.GetValue(this, null) ?? default(decimal));
        }
    }

    public DateTime? Modified { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void ForecastChanged(string name)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }

    public decimal? this[string name]
    {
        get
        {
            var property = GetType().GetProperty(name);
            if (property == null) throw new InvalidOperationException("Invalid property specified.");
            if (property.PropertyType == typeof(decimal))
            {
                return property.GetValue(this, null) as decimal?;
            }
            throw new InvalidOperationException("Invalid property specified.");
        }
    }
}
</code></pre>

<p>}</p>