用于MVC中TextBoxFor的DisplayFormat

Mur*_*san 25 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我需要将4位十进制四舍五入到2位数,并在MVC 3 UI中显示

像这样的58.8964到58.90

试过这个我应该如何在MVC中使用EditorFor()获取货币/货币类型?但没有工作.

因为我正在使用TextBoxFor =>我在这里删除了ApplyFormatInEditMode.即使我尝试使用ApplyFormatInEditMode,但没有任何作用.仍然显示我58.8964.

MyModelClass

 [DisplayFormat(DataFormatString = "{0:F2}")]
 public decimal? TotalAmount { get; set; }

 @Html.TextBoxFor(m=>m.TotalAmount)
Run Code Online (Sandbox Code Playgroud)

我怎样才能完成这一轮?

我不能在这里使用EditorFor(m => m.TotalAmount),因为我需要传递一些htmlAttributes

编辑:

在使用MVC源代码调试之后,它们在内部使用

 string valueParameter = Convert.ToString(value, CultureInfo.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)

在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);
   }
Run Code Online (Sandbox Code Playgroud)

Sam*_*ppe 48

这适用于MVC5

@Html.TextBoxFor(m => m.TotalAmount, "{0:0.00}")
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 21

如果您想要考虑自定义格式,则应使用Html.EditorFor而不是Html.TextBoxFor:

@Html.EditorFor(m => m.TotalAmount)
Run Code Online (Sandbox Code Playgroud)

还要确保已设置ApplyFormatInEditMode为true:

[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
public decimal? TotalAmount { get; set; }
Run Code Online (Sandbox Code Playgroud)

DisplayFormat属性仅用于模板化帮助程序,如EditorForDisplayFor.这是推荐的方法,而不是使用TextBoxFor.

  • 但我需要传递html属性. (8认同)
  • 是,对的.但编辑器不接受htmlAttributes作为参数.:( (3认同)
  • @DarinDimitrov,好消息,"我们现在允许在[MVC 5.1更新]中将EditorFor中的HTML属性作为匿名对象传递(http://www.asp.net/mvc/overview/releases/mvc51-release-notes#自举) (3认同)