如何更改方法 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)
调用您的方法,编译器错误应该可以自行解释需要哪种签名方法。
所以我有这个:
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)
调用您的方法,编译器错误应该可以自行解释需要哪种签名方法。