所以我有这个:

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是否正在实现接口?

编辑2:

最佳答案

@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)调用您的方法,则编译器错误应能自动说明需要哪种签名方法。

关于c# - 如何更改方法签名/属性以匹配给定的执行示例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35912907/

10-10 00:54
查看更多