所以我有这个:
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/