如何更改方法签名/属性以匹配给定的执行示例?

时间:2016-03-10 09:49:21

标签: c# asp.net-mvc linq lambda extension-methods

所以我有这个:

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:

1 个答案:

答案 0 :(得分:1)

@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)调用你的方法,编译器错误应该是自我解释需要哪种签名方法。