アプリケーションで数値をフォーマットするために 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" })
拡張機能の変数 'name' が空の文字列であるため、例外が発生します。var 名の行をこれに変更しようとしましたが、MVC 用にモデルをバインドするために必要な完全な 'Model.PointAttributes[i].Data.Y' ではなく、'Y' のプロパティ名しか表示されません。
var name = ((expression.Body is MemberExpression ?((MemberExpression)expression.Body).Member : ((MemberExpression)((UnaryExpression)expression.Body).Operand).Member)).Name;