Так что у меня это:Как изменить подпись/свойства метода для соответствия данному примеру выполнения?
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)
как сделать что?
EDIT:
или даже @Html.TextBoxFor(a => a.First().BirthDate)
, но таким образом, как проверить, если a
реализует интерфейс?
EDIT2:
Для части интерфейса просто добавьте 'где TModel: IMyInterface'. Для первой части кажется странным, что ваш 'TModel' - это коллекция, я действительно не понимаю, куда вы идете с этим –
Почему не просто' ControlPermissionType mode' вместо 'Expression> mode', а затем 'switch (mode) {...'? –
@StephenMuecke becouse модель создана в «черной коробке» serivice –