我需要将4位十进制四舍五入到2位数并在MVC 3 UI中显示
像这样的58.8964到58.90
试过这个How should I use EditorFor() in MVC for a currency/money type?但不行。
As i am using TextBoxFor=> i removed ApplyFormatInEditMode here. Even
i tried with ApplyFormatInEditMode,but nothing works. Still showing
me 58.8964.
MyModelClass
[DisplayFormat(DataFormatString = "{0:F2}")] public decimal? TotalAmount { get; set; } @Html.TextBoxFor(m=>m.TotalAmount)
我怎样才能完成这一轮?
我不能在这里使用EditorFor(m => m.TotalAmount),因为我需要传递一些htmlAttributes
编辑:
用MVC源代码调试后,他们在内部使用
string valueParameter = Convert.ToString(value,CultureInfo.CurrentCulture);
在InputExtension.cs的MvcHtmlString InputHelper()方法中,它将对象值作为参数并进行转换。他们没有使用任何显示格式。我们怎么解决?
我设法以这种方式修复。由于我有自定义助手,我可以使用以下代码进行管理
if (!string.IsNullOrEmpty(modelMetaData.DisplayFormatString)) { string formatString = modelMetaData.DisplayFormatString; string formattedValue = String.Format(CultureInfo.CurrentCulture,formatString,modelMetaData.Model); string name = ExpressionHelper.GetExpressionText(expression); string fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name); return htmlHelper.TextBox(fullName,formattedValue,htmlAttributes); } else { return htmlHelper.TextBoxFor(expression,htmlAttributes); }
解决方法
如果要将自定义格式考虑在内,则应使用Html.EditorFor而不是Html.TextBoxFor:
@Html.EditorFor(m => m.TotalAmount)
还要确保已将ApplyFormatInEditMode设置为true:
[DisplayFormat(DataFormatString = "{0:F2}",ApplyFormatInEditMode = true)] public decimal? TotalAmount { get; set; }
DisplayFormat属性仅用于模板化帮助程序,如EditorFor和DisplayFor。这是推荐的方法,而不是使用TextBoxFor。