如何更改方法 signature/properties 以匹配给定的执行示例?

How to change method signature/properties to match given execution example?

所以我有这个:

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, Expression<Func<TModel, ControlPermissionType>> mode)
{
    MvcHtmlString value = null;
    var modeIn = ModelMetadata.FromLambdaExpression(
                    mode, htmlHelper.ViewData
                ).Model;
    switch ((ControlPermissionType)modeIn)
    {
        case ControlPermissionType.Read:
            value = htmlHelper.TextBoxFor(expression, new { @readonly = "readonly" });
            break;
        case ControlPermissionType.Edit:
            value = htmlHelper.TextBoxFor(expression);
            break;
        case ControlPermissionType.Deny:
            value = new MvcHtmlString(string.Empty);
            break;
    }
    return value;
}

我是这样称呼它的:

@Html.TextBoxFor(a => a.First().BirthDate, a => a.First().Mode)

但我想要的是:

@Html.TextBoxFor(a => a.First().BirthDate, a.Mode)

怎么做?

编辑:

甚至 @Html.TextBoxFor(a => a.First().BirthDate) 但是通过这种方式如何检查 a 是否正在实现接口?

EDIT2:

@Html.TextBoxFor(a => a.First().BirthDate, a => a.First().Mode)

需要方法签名:

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, Expression<Func<TModel, ControlPermissionType>> mode)


@Html.TextBoxFor(a => a.First().BirthDate, a.Mode)

需要方法签名:

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, ControlPermissionType mode)


@Html.TextBoxFor(a => a.First().BirthDate)

需要方法签名:

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)

但在最后一种情况下,您错过了 ControlPermissionType。

顺便说一下,如果您尝试使用 @Html.TextBoxFor(a => a.First().BirthDate) 调用您的方法,编译器错误应该可以自行解释需要哪种签名方法。