1

我有他的密码。部分视图。

<div class="input width110">
    @Html.EditorFor(x => x.Price, @Html.Attributes(@class: "right_text_align", @disabled: "true", @id: "Price"))
</div>

模型。

public class ServiceModel
{
 [DisplayFormat(DataFormatString = "{0:0.00}", ApplyFormatInEditMode = true)]
 public decimal Price { get; set; }
}

控制器

public ActionResult SetService(ServiceModel model, string action)
{

            if (ModelState.IsValid)
            {
               /*Does smthg.*/
               ModelState.Clear(); 
            }

       return View("Index", rcpModel); 
       //Index is main view, which holds partialView
       //rcpModel holds, model
 }

当视图加载时,十进制以格式“0.00”显示。但是在发布后,当modelState 是无效数字时,以“0.0000”格式显示。如果模型状态有效,则一切顺利。有没有人遇到过类似的事情?

4

2 回答 2

1

如果您有 javascript 修改文本框上的值(货币格式或逗号),那么您可能会遇到绑定错误,因为它将表现为字符串。尝试这个:

为十进制值创建 BindingProperty

public class DecimalModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext,
                            ModelBindingContext bindingContext)
    {
        var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        var modelState = new ModelState { Value = valueResult };
        object actualValue = null;
        try
        {
            actualValue = Convert.ToDecimal(valueResult.AttemptedValue,
                                            CultureInfo.CurrentCulture);
        }
        catch (FormatException e)
        {
            modelState.Errors.Add(e);
        }

        bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
        return actualValue;
    }
}

在您的 global.asax app_start 或 WebActivator.PostApplicationStartMethod 添加一个条目以注册自定义活页夹:

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
于 2013-05-16T14:39:16.237 回答
0

显示点而不是逗号足以在调用视图之前使用的代码的每个点将文化更改为英语。

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("En");
于 2014-10-22T09:30:56.747 回答