Ошибка передачи массива в расширение HTML Helper - PullRequest
0 голосов
/ 13 января 2011

Так что мне очень помогли здесь создать этот метод и заставить его работать ... но, поскольку это кто-то другой, я подумал, что из этого возникнет другой вопрос.

Сначала у меня был помощник HTMLметод расширения работает путем передачи дополнительной строки, чтобы определить разрешение, которое я проверял в расширении.Теперь я хочу передать массив строк (разрешений) и просмотреть их в методе, но я получаю эту ошибку:

CS1501: нет перегрузки для метода 'CheckBoxForWithPermission', не принимает 4 аргумента

Вот вызов помощника:

<%= Html.CheckBoxForWithPermission(m => m.Current, new string[] { Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced }, Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%>

А вот фактический метод:

// CHECKBOX WITH PERMISSIONS
        // WITHOUT -- READONLY
        public static MvcHtmlString CheckBoxForWithPermission<TModel>(
                                                          this HtmlHelper<TModel> htmlHelper,
                                                          Expression<Func<TModel, bool>> expression,
                                                          string[] permissions,
                                                          object htmlAttributes
                                                         )
        {
            foreach (string permission in permissions)
            {
                if (Chatham.Web.UI.Extranet.SessionManager.PhysicalUser.IsInRole(permission))
                {
                    // the user has the permission => render the checkbox
                    return htmlHelper.CheckBoxFor(expression, htmlAttributes);
                }
            }
            // the user has no permission => render a readonly checkbox
            var mergedHtmlAttributes = new RouteValueDictionary(htmlAttributes);
            mergedHtmlAttributes["disabled"] = "disabled";
            return htmlHelper.CheckBoxFor(expression, mergedHtmlAttributes);
        }

1 Ответ

1 голос
/ 13 января 2011

Этот бит выглядит как проблема:

new string[] {
    Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced
}, 
Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced

Я думаю, что должно быть:

new string[] {
    Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced,    
    Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced
}

Ваш текущий код пытается передать массив с одним разрешением, а затем с другой строкой ... тогда как, вероятно, вы имели в виду передать массив с обоими разрешениями.

Сказав это, оба разрешения здесь одинаковы ... это тоже выглядит непреднамеренно. Какие разрешения вы пытались использовать?

(Ради интереса ради читабельности - разве вы не можете добавить директиву using, чтобы просто ссылаться на PERMISSIONS.hasICAdvanced?)

...