代码之家  ›  专栏  ›  技术社区  ›  Sebastian 506563

如何更改方法签名/属性以匹配给定的执行示例?

  •  2
  • Sebastian 506563  · 技术社区  · 10 年前

    所以我有这个:

    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:

    1 回复  |  直到 9 年前
        1
  •  1
  •   Panda    10 年前

    @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。文本框(a=>a.First().BirthDate) ,编译器错误应该不言而喻,说明需要哪种签名方法。