私は自分のアプリケーションの名前空間
<%@ Import Namespace="MvcApplication2" %>
を輸入してきたし、最終的に私はこのように私のコードを使用することができます
public static class HtmlHelperExtensions
{
public static string HtmlIdNameFor<TModel, TValue>(
this HtmlHelper<TModel> htmlHelper,
System.Linq.Expressions.Expression<Func<TModel, TValue>> expression)
{
return (GetHtmlIdNameFor(expression));
}
private static string GetHtmlIdNameFor<TModel, TValue>(Expression<Func<TModel, TValue>> expression)
{
if (expression.Body.NodeType == ExpressionType.Call)
{
var methodCallExpression = (MethodCallExpression)expression.Body;
string name = GetHtmlIdNameFor(methodCallExpression);
return name.Substring(expression.Parameters[0].Name.Length + 1).Replace('.', '_');
}
return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1).Replace('.', '_');
}
private static string GetHtmlIdNameFor(MethodCallExpression expression)
{
var methodCallExpression = expression.Object as MethodCallExpression;
if (methodCallExpression != null)
{
return GetHtmlIdNameFor(methodCallExpression);
}
return expression.Object.ToString();
}
}
:Macの答えhereと私の命令は私自身のカスタム拡張を構築しました
<%=Html.HtmlIdNameFor(m=>m.Customer.Name)%>
「System.Linq.Expressionsを使用する」必要があることは注目に値するこれが機能するにはとにかくスウィートコード:) –
あなたはまた、 '['& ']'(配列要素を参照している場合)を置き換える必要があると思う – Nadav