我已经实现了一个 MVC 扩展来格式化我的应用程序中的数字。它基于此处找到的代码。如下
public static MvcHtmlString DecimalBoxFor<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, double?>> expression, string format, object htmlAttributes = null)
{
var name = ExpressionHelper.GetExpressionText(expression);
double? dec = expression.Compile().Invoke(html.ViewData.Model);
var value = dec.HasValue ? (!string.IsNullOrEmpty(format) ? dec.Value.ToString(format) : dec.Value.ToString()): "";
return html.TextBox(name, value, htmlAttributes);
}
当我使用以下 Razor 语法行调用它时
@Html.DecimalBoxFor(model => Model.PointAttributes[i].Data.Y,"0.000", new { @class = "span1 number" })
我得到一个例外,因为我的扩展中的变量“名称”是一个空字符串。我尝试将 var name 行更改为此,但它只给了我“Y”的属性名称,而不是我需要将模型绑定回 MVC 的完整“Model.PointAttributes[i].Data.Y”。
var name = ((expression.Body is MemberExpression ?((MemberExpression)expression.Body).Member : ((MemberExpression)((UnaryExpression)expression.Body).Operand).Member)).Name;