2016-03-10 2 views
2

Так что у меня это:Как изменить подпись/свойства метода для соответствия данному примеру выполнения?

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:

+2

Для части интерфейса просто добавьте 'где TModel: IMyInterface'. Для первой части кажется странным, что ваш 'TModel' - это коллекция, я действительно не понимаю, куда вы идете с этим –

+0

Почему не просто' ControlPermissionType mode' вместо 'Expression > mode', а затем 'switch (mode) {...'? –

+0

@StephenMuecke becouse модель создана в «черной коробке» serivice –

ответ

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)

N Метод ПЕД подписи:

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), ошибка компилятора должна быть объяснительной, по которой необходим метод подписи.

+0

Вы правы насчет ошибки компилятора, я исправил ее, просто изменив имя метода. также 'public static MvcHtmlString TextBoxFor (этот HtmlHelper htmlHelper, выражение <выражение FOM >, режим ControlPermissionType)' плохо, потому что он не видит 'a' –