DataFormatString:该字段必须是数字

时间:2015-04-06 14:56:38

标签: c# sql-server asp.net-mvc culture

我有这个型号:

[DisplayFormat(DataFormatString = "{0:c}", ApplyFormatInEditMode = true)]
public decimal SpotPrice { get; set; }

在我的详细信息视图中,它将价格显示为“25,00”。当我尝试编辑价格时,该字段预先填入数据库条目“25,00”。当我立即点击保存时,我收到此错误:"The field SpotPrice must be a number."

根据question中给出的建议,我在Web中设置了我的全球文化.Config:

<system.web>
<globalization culture="nl-NL"/>
</system.web>

我也尝试过很多不同的DataFormatStrings,但是没有一个能让我摆脱那条错误信息。

我使用SQL Server存储价格。

编辑:更新了问题: 我该怎么做才能使这个价格字段正确验证?

编辑:这是我的编辑方法,用于保存新价格:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "CampingSpotId,SpotName,FieldName,Surface,Wifi,Water,Sewer,Reserved,Booked,SpotPrice,Type")] CampingSpot campingSpot)
{
    if (ModelState.IsValid)
    {
        _campingspotrepository.SetModified(campingSpot);
        return RedirectToAction("Index");
    }
    return View(campingSpot);
}

SetModified方法执行此操作:

public void SetModified(CampingSpot campingSpot)
{
    db.Entry(campingSpot).State = EntityState.Modified;
    db.SaveChanges();
}

2 个答案:

答案 0 :(得分:1)

您必须在模型

中编写[DataType(DataType.Currency)]
[DataType(DataType.Currency)]
public decimal SpotPrice { get;set;}

答案 1 :(得分:0)

我在货币和日期格式方面遇到了同样的问题。如果没有人有适当的解决方案,解决方法是使SpotPrice成为字符串并在服务器端验证它:

http 200

在控制器中,转换为十进制,如果失败,则向ModelState添加错误。