CultureInfo在服务器和浏览器ASP.NET MVC之间发生冲突

时间:2013-12-13 13:15:18

标签: c# javascript asp.net-mvc validation cultureinfo

我的模特课:

public class Person
{
    [DataType(DataType.Currency)]
    public decimal Salary { get; set; }  
}

我的控制器

public class PersonController : Controller
{
    public ActionResult Create()
    {
        var person = new Person();
        person.Salary = 100; // setting default value
        return View(person);
    }
    public ActionResult Create(Person person)
    {
        // Save, validate, etc...
    }    
}

我的创建视图:

@model Person
<h2>Create person</h2>
@using (Html.BeginForm()) {

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

单击“提交”时,页面显示以下错误的验证错误:

enter image description here

请注意整数和小数之间的分隔符。我认为错误验证失败源于文化信息差异。在服务器上,C#使用逗号作为分隔符,在客户端JS上需要一个点。什么是解决此问题的安全方法?

2 个答案:

答案 0 :(得分:1)

此StackOverflow问题也可能是您正在寻找的解决方案:

How should I use EditorFor() in MVC for a currency/money type?

答案 1 :(得分:0)

我发现在EditorFor()上下文中没有控制服务器端编号=&gt;字符串转换的程序化答案。但是,服务器计算机的区域设置是确定小数分隔符的决策点。因此,我们只需确保正确设置服务器的区域设置。