我需要4位小数四舍五入到2个位数,显示在MVC 3 UI
事情是这样的58.8964至58.90
尝试下面这个我应该如何使用EditorFor()在MVC的货币/货币类型? 但不工作。
由于我使用TextBoxFor =我>我在这里删除ApplyFormatInEditMode。 即使我试图与ApplyFormatInEditMode,但没有任何工程。 不过我展示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);
在MvcHtmlString InputHelper()InputExtension.cs的方法,它接受对象的值作为参数和转换。 他们没有使用任何有显示格式。 我们怎么能解决?
我设法用这种方式来解决。 因为我有一个自定义的帮手,我可以能够与下面的代码管理
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
。
这部作品在MVC5
@Html.TextBoxFor(m => m.TotalAmount, "{0:0.00}")
尝试这样的:
@{
var format = String.Format("{0:0.00}", Model.TotalAmount);
}
@Html.TextBoxFor(m => m.TotalAmount, format)
希望能帮助到你。
如果你需要的领域进行更多的控制显示(与在EditorFor模板内置)创建一个自定义模板EditorFor自己。 内部的EditorFor模板,内置于HTML辅助像@Html.TextBox()
可以用其通常只适用于自动客户端验证和显示属性被用于EditorFor
和DisplayFor
。
例如通过循环项目列表。 输入名字必须有一个完整的指数。
// Optional, if you require a custom input name for binding
String fieldName = String.Format("FieldNameForBinding[{0}].Property", index)
@Html.EditorFor(m => m.Property, "MyCustomEditorTemplate", fieldName)
然后,你可以设置你的模型
[CustomValidation(..optional..)]
[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
public decimal? TotalAmount { get; set; }
该EditorFor模板(例如,在〜/查看/共享/ EditorFor / MyCustomEditorTemplate.cshtml)注意名称为空,它来自fieldName
自动。 你可以看到它在ViewData.TemplateInfo.HtmlFieldPrefix
。 现在你有过场的显示完全控制。
@model object
@{
Decimal? actualValue = (Decimal?)Model;
}
// The TextBox and ValidationMessage "names" are empty, they are filled
// from the htmlFieldName given via the @Html.EditorFor() call.
@Html.TextBox("", actualValue, new { @class = "cssClass" })
@Html.ValidationMessage("")
这个想法是,你可以自定义输入字段,但是你想,并使用如@ Html.TextBox(),它的自定义之外 EditorFor模板不会利用内置的客户端验证。 你并不需要使用输入字段的自定义命名,这只是该解决方案的有效性的一个例子。 您可以自定义的,而不是依靠内置的EditorFor模板中的数据呈现方式(CSS等)。
我解决这样这个问题:
@Html.TextBoxFor(model => model.dtArrivalDate, ModelMetadata.FromLambdaExpression(model => model.dtArrivalDate, ViewData).EditFormatString)
或者创建一个扩展:
public static class HtmlExtensions
{
public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
{
return htmlHelper.TextBoxFor(expression, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).EditFormatString, htmlAttributes);
}
}
但是,你需要设置ApplyFormatInEditMode=true
在DisplayFormatAttribute
在你的领域。